如何在OpenLiberty中独立启用JCache配置管理自定义缓存?
OpenLiberty下基于JCache+Infinispan实现自定义缓存的正确姿势
核心结论
OpenLiberty没有单独的cache特性,但你可以通过最小特性组合启用JCache核心能力,完全不需要引入会话缓存这类冗余功能。
具体配置方法
在server.xml里只需要启用两个轻量特性:
cdi-2.0(或对应你JEE版本的CDI特性,比如cdi-4.0):OpenLiberty的JCache集成依赖CDI来注入CacheManager和Cache实例jcache-1.1:这是对应JCache API的核心特性,会自动注册CachingProvider、CacheManager,并支持自定义缓存配置
示例配置片段:
<featureManager> <feature>cdi-2.0</feature> <feature>jcache-1.1</feature> </featureManager> <!-- 配置你的自定义Infinispan缓存 --> <cacheManager id="myCustomCacheManager"> <cache id="myDataCache" uri="infinispan-config.xml"/> </cacheManager>
把你的Infinispan配置文件infinispan-config.xml放在应用WEB-INF目录或者服务器的config目录下即可。
关于配置元素的依赖说明
你提到的cache、cacheManager、cachingProvider这些配置元素,必须依附于对应的特性才能生效——jcache-1.1就是专门为JCache API设计的最小特性集,不会附带会话缓存功能(会话缓存需要额外启用sessionCache-1.0这类特性,你完全可以跳过)。
备选方案的优劣对比
如果选择不依赖OpenLiberty,独立使用Infinispan+JCache,完全可行,但要注意:
- 你得自己在代码里手动初始化缓存组件,比如:
CachingProvider provider = Caching.getCachingProvider(); CacheManager cacheManager = provider.getCacheManager(new URI("infinispan-config.xml"), getClass().getClassLoader()); Cache<String, Object> myCache = cacheManager.getCache("myDataCache");
- 这种方式不需要服务器任何缓存特性,但会失去OpenLiberty集成的好处:比如缓存资源随服务器生命周期自动管理、CDI注入支持、统一配置入口等。
总结
优先选cdi-2.0 + jcache-1.1的组合,既能满足自定义缓存需求,又能利用服务器的集成能力,完全没有冗余功能。只有当你完全不想和服务器配置耦合时,再考虑独立使用Infinispan的方案。
内容的提问来源于stack exchange,提问作者Clément Honoré
相关产品推荐
相关产品推荐

