问题标签 [jsr107]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
344 浏览

spring - 使用 @CacheResult 时对参数调用静态方法

我需要缓存调用 web 服务的方法的结果。方法签名是这样的:

结果取决于所有参数

我为缓存创建了 ehcache 配置myCache,通常要使用此缓存,我应该使用@CacheResult注释:

但在我的情况下,我需要在参数上调用静态方法,我想以与注释date相同的方式执行此操作:@Cacheable

我的问题是如何在使用时对参数调用静态方法 @CacheResult

0 投票
2 回答
1268 浏览

spring-boot - Jcache 的缓存关键问题

我在 Springboot 中使用 JSR107 缓存。我有以下方法。

第一次进行实际的 API 调用,第二次加载缓存没有问题。我可以看到日志的以下部分。

但问题是我想加载缓存而不进行第一次 API 调用,只需要像下面这样填充缓存。

当我检查时,缓存键的哈希码在两种情况下都是相同的,但它正在进行 API 调用。如果两种情况下的哈希码相同,为什么不考虑缓存就进行 API 调用?

在调试 spring 类时发现,org.springframework.cache.interceptor.SimpleKeyGenerator 与缓存键生成一起使用,即使 @CacheResult 在那里。 编辑并增强问题:

除此之外,如果 getAllBooks 具有重载方法,然后通过单独的重载方法调用此缓存方法,在这种情况下,方法缓存也不起作用。

0 投票
1 回答
1248 浏览

java - 咖啡因或任何 JVM 缓存 API 的驱逐事件侦听器?

这里是 Java 8。当记录被逐出缓存时,是否有任何方法可以通知Caffeine缓存框架(或任何其他 JSR-107 兼容框架)?

也许某种EvictionEventListener或什么?

咖啡因、番石榴、Hazelcast(基本上是“ JVM 缓存区”)等中是否有类似的东西?

0 投票
1 回答
482 浏览

spring - Spring JCache 记录缓存命中

我有一个方法,我通过添加 @CacheResult 注释来添加缓存(我实际上创建了一个代理,因为我无法更改 的原始实现SomethingService):

我现在需要的是能够记录缓存命中,这意味着返回的结果是来自缓存的结果。我查看了 Spring Cache、JCache 和 EHCache(我使用的实现),我只找到了侦听(使用侦听器)以下事件的方法:CREATED、UPDATED、REMOVED、EVICTED、EXPIRED 但它们都没有缓存返回结果(非空)时的事件。

我真的不想更改实现以编程方式使用缓存而不是使用注释(我实际上有很多服务要更改,而不仅仅是一个),是否有一种好方法来记录这些事件?

0 投票
1 回答
1414 浏览

java - 具有多个缓存提供程序的 JCache?

我故意在我的类路径中有几个不同的缓存提供程序。我有用于分布式缓存的 Hazelcast 和用于本地缓存的 Caffeine。我正在尝试使用 JCache (JSR107) 注释来缓存我的值。

我已经创建了一个 CacheResolverFactory,它将能够检测从哪个提供者(基于方法注释)使用哪个缓存管理器,但是当我启动我的应用程序时,我收到以下错误消息:

显然,我知道我有多个缓存提供程序。但是,我似乎无论如何都找不到这个问题。该类org.jsr107.ri.annotations.cdi.CacheLookupUtil有一个私有 CacheResolverFactory 成员,该成员在构造时初始化为 DefaultCacheResolverFactory(),它需要一个 CacheProvider。

我能做些什么来规避这个问题吗?JCache只能与 1 个缓存提供程序一起使用吗?并且CacheLookupUtil该类被字段@Inject编辑到所有注释处理器中。

我唯一的选择是覆盖所有拦截器(并提供自定义拦截器)并创建自己的 CacheLookupUtil 实现吗?或者还有什么我可以做的吗?

0 投票
1 回答
277 浏览

hazelcast - 无论如何要从 Hazelcast 中查看缓存条目元数据(即:添加日期、上次访问等)?

我在嵌入式模式下使用带有分布式缓存的 Hazelcast。我的缓存是用驱逐策略和过期策略定义的。

我遇到的问题是我的侦听器似乎在生产环境中过早触发;即使最近查询了缓存,侦听器也会被执行(删除)。

当过期监听器触发时,我得到了 CacheEntry,但我希望能够看到过期的原因,它是被驱逐(由于 MaxSize 策略)还是过期(持续时间)。如果已过期,我想查看上次访问时间的时间戳。如果被驱逐,我想查看缓存中的条目数等。

这些统计/指标/元数据是否可以通过 Hazelcast API 在任何地方获得?

0 投票
1 回答
1319 浏览

hazelcast - 有没有办法修改已以声明方式声明的 JCache 的过期策略?

我正在使用 Hazelcast 3.12 jCache 实现。我的缓存已声明(通过 hazelcast-config.xml),但是我希望能够动态更改 ExpiryPolicy 的持续时间,因为超时值只能以编程方式使用。

我查看了 ICache 的文档,但没有看到任何可以让我检索和/或修改整个缓存的过期策略的方法。

我的缓存声明为:

我想在检索到到期政策时设置/更新到期政策:

使用 jCache 或 Hazelcast API 是否可行?

0 投票
0 回答
71 浏览

spring-boot - Hystrix javanica缓存和JCache

我有一个带有 Hystrix(Javanica)和 JCache(EHCache 实现)的 SpringBoot(2.1.7)应用程序。我@HystrixCommand有用注释注释的方法来为它们启用 Hystrix。我也对这些方法进行了缓存。它看起来像这样:

现在我正在查看文档,实际上有 2 个不同的@CacheResult注释:一个来自 JCache (jsr-107),一个来自 Javanica (Hystrix)。

如果我还希望 Hystrix 使用缓存,我是否也应该指定第二个@com.netflix.hystrix.contrib.javanica.cache.annotation.CacheResult

或者我可以更好地移动@CacheResult到方法getAllUserProfilesFromBackend,然后用 Hystrix 注释 Hystrix 方法@CacheResult吗?

我只是想知道,因为 Hystrix 框架可以在服务失败的情况下使用缓存,但我不清楚它是否自动使用 JCache。

0 投票
1 回答
1744 浏览

java - JCache 键异常

我有一个必须缓存的方法。我有一个带有 JSR-107 (JCache) 缓存的 SpringBoot 2.1.7 应用程序。使用的缓存实现:EHCache 3.8.0。

CacheDefaults(cacheName = "profileCache") 当我使用注释时,该类被注释:@EnableCaching在我的 SpringBoot 入门类上,尝试访问该方法时出现此异常:

这是缓存规范:

当我将注释更改为它时,@EnableCaching(mode = AdviceMode.ASPECTJ)它确实有效。这是一个错误还是我在这里做错了什么?

0 投票
1 回答
993 浏览

wildfly - 为什么包含在 Infinispan 的白名单中的类仍然会抛出错误“未注册编组器”?

我正在使用 Infinispan 10 和 Wildfly 17。我有一个 infinispan.xml 文件,其中包含我指定编组器的类白名单:

我遵循了这个文档,第 9.1.2 章 Java Serialization Marshaller

但它似乎不适用于特定的类,即 org.jsr107.ri.annotations.DefaultGeneratedCacheKey。错误信息是:

如何将该类添加到 Infinispan 的白名单?

更多信息:

我在启动时加载 CacheManager,如下所示:

我的 pom.xml 中的 Infinispan 依赖项:

在standalone.xml 中,这就是我发现的与Infinspan 相关的全部内容。