gpt4 book ai didi

Spring + Hibernate Search动态配置

转载 作者:行者123 更新时间:2023-12-04 18:33:03 25 4
gpt4 key购买 nike

我目前正在尝试通过 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.search.default.directory_provider 设置为 filesystem-master,在另外两台机器上,我需要将其设置为 filesystem-slave。

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

有没有办法以编程方式设置此参数,同时单独保留其余配置?

谢谢!

最佳答案

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

另一种方法是编写您自己的DirectoryProvider。查看 org.hibernate.search.store.impl.FSMasterDirectoryProviderorg.hibernate.search.store.impl.FSSlaveDirectoryProvider 并编写一个可以充当从属的提供程序或掌握取决于您可以在机器上读取的标志。

关于Spring + Hibernate Search动态配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13570504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com