Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 弹簧&x2B;Hibernate搜索动态配置_Spring_Hibernate_Hibernate Search - Fatal编程技术网

Spring 弹簧&x2B;Hibernate搜索动态配置

Spring 弹簧&x2B;Hibernate搜索动态配置,spring,hibernate,hibernate-search,Spring,Hibernate,Hibernate Search,我目前正试图通过spring跨3台机器配置hibernate搜索,以便使用JMS分布式索引。由于我们部署软件的方式,我必须在所有三台机器上使用相同的配置,但我需要一种方法将其中一台机器设置为JMS主机 目前,正在使用以下bean声明通过Spring配置hibernate: <bean class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" id="productSessionFac

我目前正试图通过spring跨3台机器配置hibernate搜索,以便使用JMS分布式索引。由于我们部署软件的方式,我必须在所有三台机器上使用相同的配置,但我需要一种方法将其中一台机器设置为JMS主机

目前,正在使用以下bean声明通过Spring配置hibernate:

<bean class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
id="productSessionFactory">
    <property name="dataSource">
        <ref local="productDataSource"/>
    </property>
    <property name="configLocation">
        <value>classpath:hibernate.cfg.xml</value>
    </property>
    <property name="entityInterceptor" ref="builderInterceptor"/>
    <property name="eventListeners">
        <map key-type="java.lang.String" value-type="java.lang.Object">
            <entry key="save" value-ref="saveEventListener"/>
        </map>
    </property>
</bean>

类路径:hibernate.cfg.xml
在这三台机器中的一台上,我需要将hibernate.search.default.directory\u provider属性设置为filesystem master,在另外两台上,我需要将其设置为filesystem slave

我有能力在单独的机器上设置标志,以确定哪台机器应该是主机器,但由于所有配置都是XML,我没有任何能力添加逻辑来正确设置参数

是否有一种方法可以通过编程方式设置此参数,而不影响其余的配置


谢谢

编程方式通常是可行的,但我不确定您在春季是如何做到这一点的。与将属性放入配置文件不同,您需要动态(或至少部分动态)构建属性并将其传递给AnnotationSessionFactoryBean。如果我没有弄错的话,SpringSPI中有一些钩子应该允许您这样做,例如BeanDefinitionRegistryPostProcessor


另一种方法是编写自己的DirectoryProvider。请查看org.hibernate.search.store.impl.FSMasterDirectoryProvider和org.hibernate.search.store.impl.fsslaveddirectoryProvider,并编写一个提供程序,根据您在机器上可以读取的标志,该提供程序可以充当从或主提供程序。

我一直认为主/从配置是一个难题!我喜欢JGroups自动选择大师的声音:)