0

如何配置 JBOSS Infinispan 以使用休眠级别 2 缓存。我正在使用 Spring Boot 应用程序,并且使用了已配置为使用 Hibernate 的 Spring Data JPA。我的应用程序没有任何类型的 xml 文件。我是这个缓存的新手。所以请为此提供详细的解决方案。

4

2 回答 2

1

首先,将依赖项添加到您的 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) 放入您的资源文件夹中:

<?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) 添加到资源文件夹:

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);
    }

}

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

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

Infinispan 还有一个弹簧靴启动器,您可以根据需要尝试一下。

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

使用 starter,您只需在 applicationContext.xml 中设置 Spring cache()。创建一个 SpringEmbeddedCacheManagerFactoryBean 类的 bean。然后你可以用@Cacheable 注释你想要的类。

这里的例子:https ://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-cache

于 2017-01-06T00:26:37.583 回答
1

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.platformhibernate.transaction.coordinator_class如果 Spring 没有自动为您执行此操作。

于 2017-01-09T14:20:03.750 回答