Xml 在春季为Hibernate搜索设置动态索引目录

Xml 在春季为Hibernate搜索设置动态索引目录,xml,spring,hibernate,lucene,hibernate-search,Xml,Spring,Hibernate,Lucene,Hibernate Search,这已经讨论过了,但是没有一个解决方案/建议对我有效。我想在Spring中通过persistence.xml配置lucene搜索索引路径。这一点很重要,因为部署服务器(当然)与我的本地计算机不同,所以路径将不匹配。现在,我在persistence.xml中对hibernate search的配置如下所示: <property name="hibernate.search.default.directory_provider" value="filesystem" /> <pro

这已经讨论过了,但是没有一个解决方案/建议对我有效。我想在Spring中通过persistence.xml配置lucene搜索索引路径。这一点很重要,因为部署服务器(当然)与我的本地计算机不同,所以路径将不匹配。现在,我在persistence.xml中对hibernate search的配置如下所示:

<property name="hibernate.search.default.directory_provider" value="filesystem" /> 
<property name="tempdir" value="#{ systemProperties['java.io.tmpdir'] }" />
<property name="hibernate.search.default.indexBase" value="${tempdir}\hibernate\index" /> 

我看过这个

…那么它应该起作用了?!但是,变量没有被替换,文件被写入一个新创建的名为${tempdir}的子目录,这不是我想要的:)


谢谢你的帮助

在研究此问题之前,请先介绍如何读取和使用持久性xml

但是,如果在spring上下文中配置
LocalContainerEntityManagerFactoryBean
,则persistence.xml中的字段值可以通过属性文件进行配置

使用entity manager factory的
jpaPropertyMap
属性,可以配置持久性xml文件中使用的值

下面是一个在我的项目中使用的示例配置

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="jpaPropertyMap">
        <map>
            <entry key="hibernate.c3p0.min_size" value="5"/>
            <entry key="hibernate.c3p0.max_size" value="20"/>
            <entry key="hibernate.c3p0.timeout" value="1800"/>
            <entry key="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
            <entry key="hibernate.search.default.indexBase" value="${index.directory}"/>
        </map>
    </property>
</bean>

在上述配置中,正在从属性文件读取hibernate.search.default.indexBase。当然,您需要Spring的
PropertyPlaceHolderConfigure
来读取属性文件

希望这有帮助