0

我有使用 Spring Boot 的简单应用程序。我想允许使用 JSR107 - JCache 进行方法缓存。所以在教程的帮助下,我把这段代码放在一起:

@CacheResult(cacheName = "testpoc")
public Country getCountry(Integer id){
    System.out.println("---> Loading country with code '" + id + "'");
    return new Country(id, "X", "Title");
}

使用这个 POM 文件

...
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>1.4.0.RELEASE</version>
    </dependency>
    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-cache</artifactId>
         <version>1.4.0.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>javax.cache</groupId>
        <artifactId>cache-api</artifactId>
        <version>1.0.0</version>
    </dependency>
</dependencies>
...

(依赖 'spring-boot-starter-web' 用于调用getCountry方法的简单 REST 服务)

一切都像文档所说的那样工作 - 方法只被调用一次。

现在我想在 WildFly 10 应用服务器上试用它

我修改了 pom 文件:

  • 排除tomcat
  • 排除的 spring-boot-starter-cache
  • 添加了infinispan-jcache(因为我想在standalone/domain.xml中使用wildfly配置/管理的缓存)

在 pastebin 上检查 pom 文件。

问题是,我收到以下错误: 找不到名为“java:jboss/infinispan/app-cache”的缓存

(我尝试使用分配的 JNDI 和名称来配置在 wildfly 中的 infinispan 缓存)。

以下代码创建了 Cache 对象(所以我可以使用它):

CacheManager cacheManager = Caching.getCachingProvider().getCacheManager();
Cache<String, String> cache = cacheManager.createCache("testpoc", new MutableConfiguration<String, String>());

问题

  • 是否可以使用 WildFly 管理的 Infinispan 在 WildFly 10 上使用 JCache 方法缓存?
  • 或者 Infinispan 应该用于像 JCache 这样的方法缓存,因此 JCache 比 Infinispan 具有“更多功能”。

非常感谢

PS:将整个代码放在github上并发布链接对我来说不是问题-它是几行代码......

4

1 回答 1

3

您的方法存在一些问题,所以让我逐步解决这些问题。

首先,您需要使用正确的 Infinispan 设置。WF 随附的 Infinispan 位应被视为内部或私有。为了在您的应用程序中正确使用 Infinispan - 添加org.infinispan:infinispan-embedded到您的部署或安装Infinispan Wildfly 模块您可以在此处找到安装指南(它有点过时,但过程完全相同 - 将模块解压缩到 WF 并使用DependenciesMANIFEST.MF 条目)。

成功安装 Infinispan(或将其添加到您的应用程序)后,您需要考虑是要使用Spring Cache还是JCache。如果您只对使用注释感兴趣 - 我会推荐前者,因为它更容易设置(您需要做的就是将@EnableCaching添加到您的配置之一)。最后使用 Spring Cache,您将创建一个 Infinispan CacheManagerbean。一个例子可以在这里找到。

最后一点 - 如果您仍然需要使用 JCache - 使用本手册来设置缓存提供程序。

于 2016-09-12T05:44:53.487 回答