问题标签 [spring-cache]
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.
java - java.lang.NegativeArraySizeException from Spring Cache
We are seeing this exception from a variety of sources. It's happening on a cache check from spring. In all cases, no annotation exists on the method (for caching). It happens intermittently, not readily reproducable. Seems embedded when it attempts to get the ClassUtils.getMostSpecificMethod:
Error Message:
Stack Trace:
spring - Spring 强制 @Cacheable 使用 putifAbsent 而不是 put
我的 Spring 缓存实现如下
和 Java 配置文件
默认情况下,spring 使用缓存接口中的 put 方法来更新/放入缓存中的值。如何强制 spring 使用 putifabsent 方法被调用,这样如果缓存丢失或在其他情况下,我可以获得 null 值,第一次请求具有唯一用户名和密码的方法应该返回 null 并且随后请求该用户名和密码应该返回用户名。
java - spring @Cacheable 继承
如何进行以下工作?
子类
以及这些对象的用户
然后某处
为什么这会失败
但是对于 getMyObjectConcrete 来说,同样的方法不会失败。
java - 为什么使用 AspectJ 的谷歌缓存很慢,而 SpringCaching 更快
我正在阅读有关缓存机制的内容,并使用带有 AspectJ 的 SpringCaching 创建了一个 EhCache 示例项目,并使用带有 AspectJ 的 SpringCaching 将其与谷歌缓存进行了基准测试。我的发现,让我有点吃惊。
注意:- 我的意思是 Spring Caching,方法使用 @Cacheable/@Caching 注释进行注释。
使用 AspectJ 的 SpringCaching 更胖,但另一方面,使用 AspectJ 的 google 缓存执行速度较慢。以下是他们处理请求的平均时间:-
由于我是新手,所以我也想确认一下,为什么要将 AspectJ 与 Spring Caching 一起使用,AspectJ 如何使缓存更快。
我也关注下面的帖子,但仍然不确定 AspectJ 是否真的提高了缓存性能。 http://architects.dzone.com/articles/cacheable-overhead-spring-0
spring-boot - 在每个测试类中实例化不同的缓存管理器
在我的 Spring-Boot Web 应用程序项目中,我使用 Spring Cache 来实现缓存。缓存可以通过定义在application.yml
. 我已经有现有的测试用例,假设没有缓存,则在其中编写测试。所以默认情况下,我的integration-test
配置文件缓存被禁用,我初始化NoOpCacheManager
并且我的所有测试工作。
我还想编写测试来验证缓存功能。我创建了一个CachedControllerTest
类,其中编写了所有缓存特定的测试。
问题是当我跑步时
类中的所有测试CachedControllerTest
都失败了,因为NoOpCacheManager
即使我在 bean 函数中启用了缓存,缓存管理器也已初始化。
我尝试为它创建一个单独的配置文件CachedControllerTest
,但它仍然失败,因为一旦cacheManager
初始化 bean,它就不会被重置。
这是我的 CachedControllerTest 类
应用程序.yml
我的要求是为每个测试类重新初始化 cacheManage,而 CacheConfig 是我想在运行时修改的 bean,以便CacheManager
可以初始化适当的。
如果我单独运行CachedControllerTest
类测试,它们都会通过,因为在此之前没有其他测试类运行会将 cacheManager 初始化为 NoOpCacheManager。
提前感谢您提供任何帮助/建议以使这种情况发挥作用。
编辑 1
根据 Sam 的建议,添加了@ActiveProfiles
.
编辑 2
AbstractRestControllerTest 类定义
java - 当方法没有参数时使用@CacheResult
我有一个方法可以返回系统的(很少更改的)配置并想要缓存它。配置是根据不同的数据块构建的,所以我不想缓存单个块,而是SystemConfiguration
对象本身。
该方法没有参数,我如何告诉 Ehcache 使用固定键“配置”(配置只有一个实例)?我必须创建一个CacheKeyGenerator
还是有更简单的方法?
java - 自定义 CacheResolver 不起作用
我有一个带有自定义的 Spring Boot 项目,CacheResolver
因为我需要决定运行时要使用哪个缓存,我没有任何编译错误,但是,当我进行一些测试并在我的自定义设置断点时,CacheResolver
它永远不会进入它。
这是我的缓存配置类:
这是我的 CacheResolver
这里是我使用缓存的 DAO:
我尝试过实施CacheResolver
而不是扩展,AbstractCacheResolver
但没有任何区别。
谢谢你。
java - 使用 spring Cache 缓存属性
我正在尝试使用弹簧缓存为我的方法实现缓存。问题是在第一次之后这个方法没有被执行,这意味着属性没有被加载。如果我删除 @Cacheable 注释,它工作正常。我的要求是,只要添加新属性,该方法就应该运行并加载属性,否则它应该从缓存中返回。
XML 文件:
spring - 具有缓存和泛型类型自动装配的 Spring 4
我正在使用最新版本的 Spring,当我尝试两次注入相同的泛型类型并且泛型类型的实现使用缓存时,我遇到了启动错误。
下面是我可以创建的最简单的示例来复制错误。
这编译得很好,但是当我运行应用程序时,我收到以下错误:
No qualifying bean of type [demo.GenericService] is defined: expected single matching bean but found 2: integerService,stringService
我还没有尝试过使用限定符,但我猜这将是一种解决方法。我会在发布后尝试一下。理想情况下,我希望自动装配泛型和缓存以集成开箱即用。我做错了什么,或者我能做些什么来让它工作吗?
谢谢!
java - 使用 Spring Cache 抽象的异步缓存更新
使用 Spring 的缓存抽象,如何让缓存异步刷新条目,同时仍返回旧条目?
我正在尝试使用 Spring 的缓存抽象来创建一个缓存系统,在相对较短的“软”超时之后,缓存条目可以刷新。然后,当它们被查询时,返回缓存的值,并启动异步更新操作来刷新条目。我也会
Guava 的缓存构建器允许我指定缓存中的条目应在一定时间后刷新。然后可以用异步实现覆盖缓存加载器的 reload() 方法,允许返回陈旧的缓存值,直到检索到新的缓存值。但是,spring 缓存似乎不使用底层 Guava 缓存的 CacheLoader
是否可以使用 Spring 的缓存抽象来进行这种异步缓存刷新?
编辑澄清:使用 Guava 的 CacheBuilder,我可以使用 refreshAfterWrite() 来获得我想要的行为。例如来自Guava Caches Explained:
但是,我看不到使用 Spring 的 @Cacheable 抽象来获取 refreshAfterWrite() 行为的方法。