当前位置: 首页 > 知识库问答 >
问题:

配置JBOSS Infinispan以使用Hibernate级别2缓存

薛保臣
2023-03-14

如何配置JBOSS Infinispan以使用hibernate 2级缓存。我使用的是Spring Boot应用程序,使用的是Spring Data JPA,它已配置为使用Hibernate。我的应用程序没有任何类型的xml文件。我不熟悉这种缓存。因此,请提供详细的解决方案。

共有2个答案

靳高明
2023-03-14

1)确保hibernate-infinispan(具有传递依赖项)在类路径上

2) 设置

hibernate.cache.use_second_level_cache = true
hibernate.cache.region.factory_class = org.hibernate.cache.infinispan.InfinispanRegionFactory
hibernate.cache.default_cache_concurrency_strategy = TRANSACTIONAL
javax.persistence.sharedCache.mode = ALL

您可能还需要设置hibernate.transaction.jta。平台和hibernate.transaction。如果Spring没有自动为您执行此操作,则为coordinator_类。

诸葛立果
2023-03-14

首先,将依赖项添加到您的pom.xml:

<dependency>
    <groupId>org.infinispan</groupId>
<artifactId>infinispan-spring4-embedded</artifactId>
</dependency>
<dependency>
    <groupId>org.infinispan</groupId>
    <artifactId>infinispan-jcache</artifactId>
</dependency>

然后将此文件(infinispan.xml)放在您的resources文件夹中:

<?xml version="1.0" encoding="UTF-8"?>
<infinispan xmlns="urn:infinispan:config:7.2">
    <cache-container default-cache="default">
        <local-cache name="countries" statistics="true">
            <eviction max-entries="200"/>
            <expiration lifespan="600000"/>
        </local-cache>
    </cache-container>
</infinispan>

将文件(application.properties)也添加到resources文件夹:

spring.cache.infinispan.config=infinispan.xml

然后在需要的地方添加缓存,例如:

@Component
@CacheConfig(cacheNames = "countries")
public class CountryRepository {

    @Cacheable
    public Country findByCode(String code) {
        System.out.println("---> Loading country with code '" + code + "'");
        return new Country(code);
    }

}

不要忘记在主类中启用缓存:

@EnableCaching
@SpringBootApplication
public class MySpringBootApplication {
    public static void main(String[] args) {
    }
}

英飞尼斯潘还有一款Spring靴启动器,如果你愿意,可以试试。

<dependencies>
    <dependency>
        <groupId>org.infinispan</groupId>
        <artifactId>inifinispan-spring-boot-starter</artifactId>
        <version>1.0.0</version>
    </dependency>
</dependencies>

使用启动器,您只需在应用程序中设置Spring cache()ontext.xml.创建SpringEmbeddedCacheManagerFactoryBean类的bean。然后您可以使用@Cacheable注释您想要的类。

此处示例:https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-cache

 类似资料:
  • 问题内容: 我找到了一些说明,说明如何配置纯hibernate模式以使用EHCache。但是我找不到任何有关如何配置JPA2.0 EntityManager以使用缓存的说明。Hibernate 3.5.2是我的JPA2.0提供程序。 编辑// 对实体足够了吗?还是应该使用配置实体? 问题答案: 我找到了一些说明,说明如何配置纯hibernate模式以使用EHCache。但是我找不到任何有关如何配置

  • 问题内容: 第一部分 在Grails应用程序中,我了解到您可以通过添加以下方式为每个域类启用二级缓存 默认情况下,仅在调用时使用二级缓存,但也可以通过添加到查询将其用于条件查询和动态查找器。 但是,我仍然不确定我是否了解查询缓存的工作原理。我最好的猜测是: 每个域类都有单独的查询缓存,例如一个用于Book,另一个用于Author 在执行类似的查询之前,将根据域类(Author),查询(findBy

  • 我对hibernate中如何使用第一级和第二级缓存有一些了解。与此相关的问题很多-是的,我同意 但我的困惑是。在第一级缓存中,除非我提交事务,否则我的数据不会持久化到db中,因此其他会话在此之前不会知道这些更改。如果二级缓存将实体带到会话工厂级别!这是否意味着即使在我提交事务之前,我在一个会话中的更改也可以被其他会话使用?? 使用二级缓存时何时更新到dB??在第一次,它将在结束事务时发生 我引用了

  • 本文向大家介绍Hibernate中一级缓存和二级缓存之间的区别,包括了Hibernate中一级缓存和二级缓存之间的区别的使用技巧和注意事项,需要的朋友参考一下 Hibernate支持两种类型的缓存,一种是第一级缓存,另一种是第二级缓存。  一级缓存是会话级缓存,它始终与会话级对象关联。这种类型的缓存用于通过缓存对象的状态来最小化Db交互。 那不是在事务中完成每次修改之后更新,而是仅在事务结束时更新

  • 问题内容: 标题显然表明:我无法使JPA2 / Hibernate 3.6.3的二级缓存起作用。 我一直在尝试许多方法来使其工作。但是我只能成功地使查询缓存起作用。尽管Hibernate创建了缓存(实例的名称),但它们被忽略。甚至未命中也不会注册。可能是版本不兼容。我尝试了其他一些方法,但没有结果。而且我不再尝试所有排列的任务了。:-P 我在这里问这个问题,因为有些人似乎可以解决这个问题(我也尝试

  • 我一个新的使用Hibernate缓存(一级,二级和查询缓存)。 我的项目是使用SpringMVC和JPA配置的。 我正在使用下面的JUnit测试用例测试一级缓存。 我的实体类定义为: 如果默认情况下启用了一级缓存,则应该执行一次本机查询。但我在执行此查询时得到以下结果: 以下是我的持久性相关配置: 有人能帮我解决一个问题或者我做错了什么吗? 提前感谢!