1、创建J2CacheSelfConfig类,用来注入apollo配置文件数据
2、创建J2CacheBuilderUtil类,用来根据配置文件数据动态创建缓存实例
3、项目中需要缓存实例时使用J2CacheBuilderUtil来创建实例
类的名称可以根据需要自己命名,具体代码如下:
J2CacheSelfConfig
/** * */ package com.kaitaiming.life.common.j2cache; import org.springframework.beans.factory.annotation.Value; /** * j2chache自定义配置文件 * * @author houwei * @date 2019年7月10日 * @version */ public class J2CacheSelfConfig { @Value("${j2cache.broadcast}") private String broadcast; @Value("${j2cache.L1.provider_class}") private String l1CacheName; @Value("${j2cache.L2.provider_class}") private String l2CacheName; @Value("${j2cache.serialization}") private String serialization; @Value("${redis.channel}") private String channel; @Value("${redis.mode}") private String mode; @Value("${redis.storage}") private String storage; @Value("${redis.cluster_name}") private String cluster_name; @Value("${redis.namespace}") private String namespace; @Value("${redis.channel_name}") private String channel_name; @Value("${redis.hosts}") private String hosts; @Value("${redis.timeout}") private String timeout; @Value("${redis.password}") private String password; @Value("${redis.database}") private String database; @Value("${redis.maxTotal}") private String maxTotal; @Value("${redis.maxIdle}") private String maxIdle; @Value("${redis.maxWaitMillis}") private String maxWaitMillis; @Value("${redis.minEvictableIdleTimeMillis}") private String minEvictableIdleTimeMillis; @Value("${redis.minIdle}") private String minIdle; @Value("${redis.numTestsPerEvictionRun}") private String numTestsPerEvictionRun; @Value("${redis.lifo}") private String lifo; @Value("${redis.softMinEvictableIdleTimeMillis}") private String softMinEvictableIdleTimeMillis; @Value("${redis.testOnBorrow}") private String testOnBorrow; @Value("${redis.testOnReturn}") private String testOnReturn; @Value("${redis.testWhileIdle}") private String testWhileIdle; @Value("${redis.timeBetweenEvictionRunsMillis}") private String timeBetweenEvictionRunsMillis; @Value("${redis.blockWhenExhausted}") private String blockWhenExhausted; @Value("${redis.jmxEnabled}") private String jmxEnabled; @Value("${redis.usePool}") private String usePool; @Value("${ehcache.name}") private String name; @Value("${ehcache.configXml}") private String configXml; //get\set方法就不写了 }J2CacheBuilderUtil
/** * */ package com.kaitaiming.life.common.j2cache; import java.util.Properties; import net.oschina.j2cache.CacheChannel; import net.oschina.j2cache.J2CacheBuilder; import net.oschina.j2cache.J2CacheConfig; /** * j2cache自定义配置文件创建 * * @author houwei * @date 2019年7月10日 * @version */ public class J2CacheBuilderUtil { private static CacheChannel cache; public static CacheChannel createJ2CacheChann(J2CacheSelfConfig j2CacheSelfConfig) { if (cache == null) { J2CacheConfig config = new J2CacheConfig(); config.setBroadcast(j2CacheSelfConfig.getBroadcast()); config.setL1CacheName(j2CacheSelfConfig.getL1CacheName()); config.setL2CacheName(j2CacheSelfConfig.getL2CacheName()); config.setSerialization(j2CacheSelfConfig.getSerialization()); /** * 缓存基本配置 */ Properties redisProperties = new Properties(); redisProperties.setProperty("channel", j2CacheSelfConfig.getChannel()); redisProperties.setProperty("hosts", j2CacheSelfConfig.getHosts()); redisProperties.setProperty("timeout", j2CacheSelfConfig.getTimeout()); redisProperties.setProperty("password", j2CacheSelfConfig.getPassword()); redisProperties.setProperty("database", j2CacheSelfConfig.getDatabase()); redisProperties.setProperty("maxTotal", j2CacheSelfConfig.getMaxTotal()); redisProperties.setProperty("maxIdle", j2CacheSelfConfig.getMaxIdle()); redisProperties.setProperty("maxWaitMillis", j2CacheSelfConfig.getMaxWaitMillis()); redisProperties.setProperty("minEvictableIdleTimeMillis", j2CacheSelfConfig.getMinEvictableIdleTimeMillis()); redisProperties.setProperty("minIdle", j2CacheSelfConfig.getMinIdle()); redisProperties.setProperty("numTestsPerEvictionRun", j2CacheSelfConfig.getNumTestsPerEvictionRun()); redisProperties.setProperty("lifo", j2CacheSelfConfig.getLifo()); redisProperties.setProperty("softMinEvictableIdleTimeMillis", j2CacheSelfConfig.getSoftMinEvictableIdleTimeMillis()); redisProperties.setProperty("testOnBorrow", j2CacheSelfConfig.getTestOnBorrow()); redisProperties.setProperty("testOnReturn", j2CacheSelfConfig.getTestOnReturn()); redisProperties.setProperty("testWhileIdle", j2CacheSelfConfig.getTestWhileIdle()); redisProperties.setProperty("timeBetweenEvictionRunsMillis", j2CacheSelfConfig.getTimeBetweenEvictionRunsMillis()); redisProperties.setProperty("blockWhenExhausted", j2CacheSelfConfig.getBlockWhenExhausted()); redisProperties.setProperty("jmxEnabled", j2CacheSelfConfig.getJmxEnabled()); redisProperties.setProperty("usePool", j2CacheSelfConfig.getUsePool()); config.setBroadcastProperties(redisProperties); /** * 一级缓存配置 */ Properties l1CacheProperties = new Properties(); l1CacheProperties.setProperty("name", j2CacheSelfConfig.getName()); l1CacheProperties.setProperty("configXml", j2CacheSelfConfig.getConfigXml()); config.setL1CacheProperties(l1CacheProperties); /** * 二级缓存配置 */ redisProperties.setProperty("mode", j2CacheSelfConfig.getMode()); redisProperties.setProperty("storage", j2CacheSelfConfig.getStorage()); redisProperties.setProperty("cluster_name", j2CacheSelfConfig.getCluster_name()); redisProperties.setProperty("namespace", j2CacheSelfConfig.getNamespace()); redisProperties.setProperty("channel_name", j2CacheSelfConfig.getChannel_name()); config.setL2CacheProperties(redisProperties); // 填充 config 变量所需的配置信息 J2CacheBuilder builder = J2CacheBuilder.init(config); cache = builder.getChannel(); } return cache; } }使用代码
//注入配置参数 @Resource private J2CacheComputeConfig j2CacheComputeConfig; public CacheChannel getCacheChannel() { if(cache == null) { //根据配置参数动态生成实例 cache = J2CacheBuilderUtil.createJ2CacheChann(j2CacheComputeConfig); } return cache; }