如何通过编程方式在Infinispan缓存中配置write-behind持久化
Infinispan编程式配置write-behind缓存实现方案
核心逻辑
Infinispan所有XML可配置项均有对应的Java API映射,write-behind(异步写持久化)配置可通过持久化存储的异步配置项完成,无需依赖XML声明。
完整配置示例
以下为带write-behind配置的JDBC持久化缓存配置样例:
import org.infinispan.configuration.cache.Configuration; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.persistence.jdbc.configuration.JdbcStringBasedStoreConfigurationBuilder; import java.util.concurrent.TimeUnit; // 构建带write-behind的缓存配置 Configuration cacheConfig = new ConfigurationBuilder() // 开启持久化配置项 .persistence() // 此处以JDBC字符串存储为例,可按需替换为SingleFileStore、RemoteStore等其他存储实现 .addStore(JdbcStringBasedStoreConfigurationBuilder.class) // 配置存储基础属性:预加载持久化数据、拉取集群持久化状态 .preload(true) .fetchPersistentState(true) // 启用write-behind(异步写)配置,对应XML中的<write-behind>标签 .async() // 开启异步写功能 .enable() // 写队列最大容量,队列满后将阻塞新的写请求 .modificationQueueSize(1024) // 异步刷写线程池大小 .threadPoolSize(2) // 定期刷写持久化存储的间隔,此处配置为15秒 .flushInterval(15, TimeUnit.SECONDS) // 配置写失败后是否静默忽略错误 .failSilently(false) // 退回持久化配置层可继续配置其他存储相关参数(如JDBC连接池、表结构等) .persistence() // 生成最终配置对象 .build();
常用参数映射关系
XML配置的write-behind属性和Java API的对应关系如下:
<write-behind enabled="true"/>对应.async().enable()modification-queue-size="xxx"对应.modificationQueueSize(xxx)thread-pool-size="xxx"对应.threadPoolSize(xxx)flush-interval="xxx"对应.flushInterval(xxx, TimeUnit.MILLISECONDS)fail-silently="xxx"对应.failSilently(xxx)
注意事项
- 上述配置逻辑对所有Infinispan内置持久化存储实现通用,只需替换
addStore传入的存储配置类即可适配不同存储介质 - 10.x及更早版本的Infinispan API命名可能存在微小差异,核心逻辑均为在持久化存储配置下调用异步配置方法设置对应参数
- 配置生成完成后,将
Configuration对象传入CacheManager的defineConfiguration()或createCache()方法即可生效,和XML配置效果完全一致
内容的提问来源于stack exchange,提问作者Antoine Toulme
相关产品推荐
相关产品推荐

