- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在将 JCache 注释与 Spring 和 EhCache 一起使用。如果我在方法上使用 @CacheResult 而不指定缓存名称(或类上的 @CacheDefaults),则默认缓存名称将解析为完全限定的方法名称。然而,除非使用 CacheManager 显式创建,否则找不到这样的缓存。对于一些此类启用缓存的方法来说,这可能是可以管理的,但如果我必须手动创建 50 个不同的缓存,则无法管理。
是否有办法告诉 Spring(或任何 JCache 实现者)自动使用默认名称创建缓存(如果没有找到)?这将允许我在任何方法上使用@CacheResult,而不必每次都更新缓存配置。
最佳答案
Is there a way to tell Spring (or any JCache implementer) to automatically create caches with the default name, if not found?
cache2k 中涵盖了此问题。如果请求的缓存名称未知,您可以将cache2k配置为使用默认配置。
以下是此场景的 XML 配置示例,位于类路径中的 /cache2k.xml
中:
<cache2k xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xmlns='https://cache2k.org/schema/v1.x'
xsi:schemaLocation="https://cache2k.org/schema/v1.x https://cache2k.org/schema/cache2k-core-v1.x.xsd">
<version>1.0</version>
<ignoreMissingCacheConfiguration>true</ignoreMissingCacheConfiguration>
<defaults>
<!-- default settings for every cache -->
<cache>
<entryCapacity>100_000</entryCapacity>
<expireAfterWrite>5m</expireAfterWrite>
</cache>
</defaults>
<templates>
<cache>
<name>shortExpiry</name>
<expireAfterWrite>5m</expireAfterWrite>
</cache>
<cache>
<name>lessResilient</name>
<resilienceDuration>1m</resilienceDuration>
</cache>
</templates>
<caches>
<cache>
<name>products</name>
<entryCapacity>10_000</entryCapacity>
<include>shortExpiry,lessResilient</include>
</cache>
<cache>
<name>users</name>
<entryCapacity>1000</entryCapacity>
<include>shortExpiry</include>
</cache>
</caches>
</cache2k>
默认情况下,根据此配置,没有特定配置条目的缓存将获得 100K 条目限制和 5 分钟到期时间。该配置可能适合生产中的跟踪。稍后,您或系统运算符(operator)可以通过 JMX 检查现有的缓存及其性能,然后在需要时添加更具体的缓存配置。如果你有很多缓存,配置有模板机制以避免重复。
缓存可能需要预先进行特定配置,而有些则不需要。我建议将它们分成不同的缓存管理器。
如果您需要进程内缓存,cache2k 是 EHCache 的一个很好的替代方案。它速度更快,内存效率更高。
您可以通过 JCache 使用cache2k,但是也有直接的 Spring 框架支持。请参阅User Guide Spring Framework Section了解详情。
我是cache2k的作者,目前并不是Spring的重度用户,但是,如果有任何问题,我很乐意提供帮助。
关于java - JCache CacheResult - 使用默认名称创建缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56933656/
我有一个方法可以返回系统的(很少更改的)配置并想缓存它。配置是根据不同的数据片段构建的,因此我不想缓存各个片段,而是缓存 SystemConfiguration 对象本身。 该方法没有参数,我如何告诉
我正在将 JCache 注释与 Spring 和 EhCache 一起使用。如果我在方法上使用 @CacheResult 而不指定缓存名称(或类上的 @CacheDefaults),则默认缓存名称将解
我是一名优秀的程序员,十分优秀!