java - 二级缓存 : Spring 3. 2.2 + Hibernate 4.2.0 Infinispan

标签 java spring hibernate jpa infinispan

尝试使用 Spring 和 Hibernate 设置二级缓存。

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" p:database="${jdbc.databaseType}" p:generateDdl="true"
              p:showSql="true"/>
    </property>
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
            <prop key="hibernate.enable_lazy_load_no_trans">true</prop>
            <prop key="hibernate.ejb.naming_strategy">com.antaresgames.ad.lobby.repository.FixedDefaultComponentSafeNamingStrategy</prop>
            <prop key="hibernate.transaction.manager_lookup_class">org.hibernate.cache.infinispan.tm.HibernateTransactionManagerLookup</prop>
            <prop key="hibernate.transaction.jta.platform">org.hibernate.service.jta.platform.internal.JBossStandAloneJtaPlatform</prop>
            <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</prop>

            <!--https://docs.jboss.org/author/display/ISPN/Using+Infinispan+as+JPA-Hibernate+Second+Level+Cache+Provider-->
            <!--CACHE CONFIGURATION-->
            <prop key="hibernate.cache.use_second_level_cache">true</prop>
            <prop key="hibernate.cache.use_query_cache">false</prop>
            <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.infinispan.JndiInfinispanRegionFactory</prop>
            <prop key="hibernate.cache.infinispan.cachemanager">java:Cachemanager</prop>
            <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.infinispan.InfinispanRegionFactory</prop>
            <prop key="hibernate.cache.infinispan.statistics">true</prop>
            <!--https://docs.jboss.org/author/display/ISPN/Eviction-->
            <!--<prop key="hibernate.cache.infinispan.entity.eviction.strategy">LIRS</prop>-->
            <!--https://docs.jboss.org/author/display/ISPN/Eviction+Examples-->
            <!--<prop key="hibernate.cache.infinispan.entity.eviction.wake_up_interval">2000</prop>-->
            <!--https://docs.jboss.org/author/display/ISPN/Eviction-->
            <!--<prop key="hibernate.cache.infinispan.entity.eviction.max_entries">5000</prop>-->
            <!--max time entity is living in memory in idle-->
            <!--<prop key="hibernate.cache.infinispan.entity.expiration.max_idle">60000</prop>-->
        </props>
    </property>
</bean>

但由于缺少documentation对于 Hibernate 4,我认为我无法正确设置缓存。

启动应用程序时,我看到如下警告:

jta.JtaTransaction - HHH000426: You should set hibernate.transaction.manager_lookup_class if cache is enabled

并且在为存储库获取实体时,它每次都在进行查询。

有什么建议吗?

最佳答案

您应该只需要以下缓存/tm 相关属性:

<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.infinispan.InfinispanRegionFactory</prop>
<prop key="hibernate.transaction.jta.platform">org.hibernate.service.jta.platform.internal.JBossStandAloneJtaPlatform</prop>
<prop key="hibernate.cache.infinispan.cfg">infinispan.xml</prop>

请注意,根据您的需要/配置,您可能需要将 InfinispanRegionFactory 替换为 JndiInfinispanRegionFactory。

关于java - 二级缓存 : Spring 3. 2.2 + Hibernate 4.2.0 Infinispan,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18575229/

相关文章:

java - 如何在更改底层 FileInputStream 的位置后重置 BufferedInputStream

java - 在 Axiom Safe Request 中使用数据库资源

java - 在查询方法中使用 @Param 传递 java.util.Date

java - 扩展 JFrame(空窗口错误)

java - 解析映射器 XML 时出错。原因 : java. lang.NullPointerException

java - 如何在 VS Code 中为 Spring Boot 项目添加 JVM 参数?

hibernate - 有没有办法将现有连接设置到实体管理器中

hibernate : Create Filter on the nested Child of a nested Child

java - Hibernate中级联删除的问题

java - Liquibase 不基于 JPA 实体创建 diff 变更日志