Java 如何在Spring Hibernate 5 LocalSessionFactoryBean中注入Spring管理的CacheRegionFactory 问题
Spring ORM Hibernate 4附带的LocalSessionFactoryBean允许通过CacheRegionFactory属性的标准依赖项注入注入CacheRegionFactory 现在对于Spring ORM Hibernate 5附带的LocalSessionFactoryBean,已经没有这样的属性了 当需要对缓存配置进行更精细的控制时,能够注入区域工厂非常方便,特别是在使用Spring将Hibernate配置为二级缓存时 我的用例是根据我的应用程序配置文件动态指定TCP/IP Hazelcast集群的成员。Hazelcast用作二级缓存 问题: 如何通过Spring依赖项注入将Spring管理的缓存区域工厂注入Hibernate 5 LocalSessionFactoryBean?还欢迎对不同方法提出建议 细节Java 如何在Spring Hibernate 5 LocalSessionFactoryBean中注入Spring管理的CacheRegionFactory 问题,java,spring,hibernate,hazelcast,spring-orm,Java,Spring,Hibernate,Hazelcast,Spring Orm,Spring ORM Hibernate 4附带的LocalSessionFactoryBean允许通过CacheRegionFactory属性的标准依赖项注入注入CacheRegionFactory 现在对于Spring ORM Hibernate 5附带的LocalSessionFactoryBean,已经没有这样的属性了 当需要对缓存配置进行更精细的控制时,能够注入区域工厂非常方便,特别是在使用Spring将Hibernate配置为二级缓存时 我的用例是根据我的应用程序配置文件动态指定
Hibernate版本:5.1.0,Spring/Spring ORM版本:4.2.5,Hazelcast版本:3.6.4使用
Hibernate.cache.region.factory\u类属性。用法示例:
此处的更多信息:您可以创建自己的会话工厂bean,从LocalSessionFactoryBean
扩展并重写方法buildSessionFactory
,通过ServiceRegistryBuilder
为Hibernate提供自己的区域工厂:
class MySessionFactoryBean extends LocalSessionFactoryBean {
private final RegionFactory regionFactory;
MySessionFactoryBean(RegionFactory regionFactory) {
this.regionFactory = regionFactory;
}
@Override
protected SessionFactory buildSessionFactory(LocalSessionFactoryBuilder sfb) {
StandardServiceRegistryBuilder serviceRegistryBuilder = sfb.getStandardServiceRegistryBuilder();
serviceRegistryBuilder.addService(RegionFactory.class, regionFactory);
return sfb.buildSessionFactory();
}
此功能最近已恢复,修复程序将在Spring Framework 5.1 RC1中提供
Spring框架JIRA的问题链接:
Arthur的答案是可行的,但还有一个略短的变体:
public class MyLocalSessionFactoryBean extends LocalSessionFactoryBean {
private RegionFactory regionFactory;
@Required
public void setRegionFactory(RegionFactory regionFactory) {
this.regionFactory = regionFactory;
}
@Override
protected SessionFactory buildSessionFactory(LocalSessionFactoryBuilder sfb) {
sfb.getProperties().put(AvailableSettings.CACHE_REGION_FACTORY, regionFactory);
return sfb.buildSessionFactory();
}
}
当然,谢谢,我知道这一点。我需要注入一个Spring管理的自定义区域工厂类/bean,在这里我可以利用我的其他Spring管理组件。我已经更新了我的问题,以澄清这一点。有什么解决办法吗?