我有一个使用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文件:
在pastebin上检查pom文件。
问题是,我收到以下错误:找不到名为“java: jboss/infinispan/app-cache”的缓存
(我尝试使用JNDI分配和名称来配置infinispan缓存)。
以下代码创建了Cache对象(所以我可以使用它):
CacheManager cacheManager = Caching.getCachingProvider().getCacheManager();
Cache<String, String> cache = cacheManager.createCache("testpoc", new MutableConfiguration<String, String>());
问题:
非常感谢
PS:我把整个代码放在github和post link上不是问题-它是几行代码......
你的方法有几个问题,所以让我分步骤介绍一下。
首先,您需要使用适当的Infinispan设置。WF附带的Infinispan位应视为内部或私有。为了在应用程序中正确使用Infinispan,可以添加org。infinispan:infinispan嵌入到部署中或安装infinispan Wildfly模块。您可以在这里找到安装指南(它有点过时,但过程完全相同-将模块解包到WF中,并使用依赖项
MANIFEST.MF条目)。
成功安装Infinispan(或将其添加到您的应用程序中)后,您需要考虑是要使用Spring Cache还是JCache。如果您只对使用注释感兴趣——我会推荐前者,因为它更容易设置(您需要做的就是将@EnableCache添加到您的配置之一)。最后,使用Spring Cache,您将创建一个InfinispanCacheManager
bean。可以在此处找到一个示例。
最后一点注意:如果您仍然需要使用JCache,请使用本手册来设置缓存提供程序。
我有一个使用Spring缓存注释的Spring Boot应用程序。现在我想迁移到JSR-107(JCache)注释。 这是我的方法: 我希望我的新方法是这样的: 计算器输入类: @CacheKey注释指示spring将整个CalculatorInput对象存储为Key。我只想使用CalculatorInput类的属性id作为键。 我如何创建一个缓存键(就像我在Spring缓存注释中所做的那样),但
JCACHE是一种即将公布的标准规范(JSR 107),说明了一种对Java对象临时在内存中进行缓存的方法,包括对象的创建、共享访问、假脱机(spooling)、失效、各JVM的一致性等。它 可被用于缓存JSP内最经常读取的数据,如产品目录和价格列表。利用JCACHE,多数查询的反应时间会因为有缓存的数据而加快(内部测试表明反应时间大 约快15倍)。
ehcache-jcache 是 ehcache 对 JCache 标准 API (JSR107) 的实现。
我使用JCache和Infinispan作为它的实现。JCache不提供任何与集群相关的API,所以我在XML配置文件中定义了简单的复制缓存配置: 现在要创建用户缓存,我需要将这种声明性配置与编程配置结合起来,因为一些缓存属性的值(例如过期超时)应该从数据库中检索。有没有办法只使用JCache中的类和接口来做到这一点?
32.4 JCache (JSR-107) 注解 Spring Framework 4.1 以来,缓存抽象完全支持 JCache 标准:即 @CacheResult,@CachePut,@CacheRemove 和 @CacheRemoveAll 还有 @CacheDefaults,@CacheKey 和 @CacheValue 。这些注解被大家正确的使用,体现了缓存在 JSR-107 的实现:缓
我想跨调用缓存方法ID。为此,我得到方法ID: 我的问题是:我是否需要使用NewGlobalRef创建全局引用,或者可以从本地引用获取并保存方法ID(我使用FindClass获取class\u HelloWorld),而不需要全局引用类元数据?