问题1:两个CacheManager 会报两个相同的实现类错误
需要继承CachingConfigurerSupport 重写cacheManager方法,指定默认一个返回缓存提供者

@Configuration
@DependsOn({"springContextHolder","ehCacheCacheManager"})//这里是关键,要先初始化这两个,因为下面用到了,只有DependsOn能实现,其它的尝试都失败
public class CacheConfigDefinition extends CachingConfigurerSupport {
/**
* 根据application 配置的缓存类型,返回自定义默认的缓存实现对象,如果不覆盖这个方法根据顺序返回
* @return
*/
@Override
public CacheManager cacheManager() {
if(Constant.CACHE_TYPE_REDIS.equals(ShiroConfig.cacheType)){
return SpringContextHolder.getBean(RedisCacheManager.class);
}else{
try{
return SpringContextHolder.getBean(EhCacheCacheManager.class);
}catch (Exception ex){
ex.printStackTrace();
}
}
return null;
}
} 另外配置RedisCacheManager和EhCacheCacheManager的类,需要明确指定EhCacheManagerFactoryBean、EhCacheCacheManager的@Bean方法,
public class CacheManagerConfig { @Value("${spring.cache.ehcache.config}")
public String ehcacheConfig; /**
* cacheManager名字
*/
public interface CacheManagerNames {
/**
* redis
*/
String REDIS_CACHE_MANAGER = "redisCacheManager";
/**
* ehCache
*/
String EHCACHE_CACHE_MAANGER = "ehCacheCacheManager";
} @Resource
private RedisTemplate<String, Object> redisTemplate;
@Bean(name = "redisTemplate")
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
//设置序列化
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om); // 配置redisTemplate
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
redisTemplate.setConnectionFactory(factory);
RedisSerializer stringSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringSerializer); // key序列化
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); // value序列化
redisTemplate.setHashKeySerializer(stringSerializer); // Hash key序列化
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); // Hash value序列化
redisTemplate.afterPropertiesSet();
return redisTemplate; } /**
* 针对自动配置类型添加自己的Bean,它将取代默认的,网上大部分把redisTemplate写在方法参数,但是行不通
* RedisTemplate带泛型注入,需要指定名称,不能按照默认的类型搜索,要根据名字装配,拿出去什么变量用@Resource
* 管理缓存
* @return
*/
@Bean
public RedisCacheManager redisCacheManager() {
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
//设置redis缓存过期时间
//cacheManager.setDefaultExpiration(redisTimeout);
return cacheManager;
} @Bean
public EhCacheManagerFactoryBean ehCacheManagerFactoryBean() {
EhCacheManagerFactoryBean cacheManagerFactoryBean = new EhCacheManagerFactoryBean();
String path[] = ehcacheConfig.split(":");
ClassPathResource classPathResource = new ClassPathResource(path.length == 2 ? path[1] : ehcacheConfig); cacheManagerFactoryBean.setConfigLocation(classPathResource);
cacheManagerFactoryBean.setShared(true);
return cacheManagerFactoryBean;
} /**
* 创建ehCacheCacheManager
*/
@Bean
public EhCacheCacheManager ehCacheCacheManager(EhCacheManagerFactoryBean bean) {
return new EhCacheCacheManager(bean.getObject());
} }

PS:码云springboot2.0通用权限系统脚手架同步更新 https://gitee.com/shenxingping/XPBoot

最新文章

  1. HTML5-03 页面布局
  2. Javascript学习笔记:3种定义函数的方式
  3. spring mvc velocity多视图
  4. JAVA装饰器模式
  5. Html 笔记1
  6. php 写session
  7. zoom的学习
  8. 《Windows驱动开发技术详解》之驱动程序的同步处理
  9. 去掉tomcat中appBase默认的ROOT
  10. Android Handler消息机制不完全解析
  11. 极重要基础命令三剑客加find
  12. Android简易实战教程--第二十三话《绚丽的菜单项》
  13. Python Installing Jupyter
  14. hibernate 一对多关系中的孤儿属性
  15. 前端开发之css
  16. MySQL 排名统计(常用功能函数)
  17. 未能为数据库 &#39;*&#39;中得对象&#39;*&#39;分配空间,因文件组&#39;PRIMARY&#39;已满
  18. 27、增强for循环
  19. OpenCV特征检测教程
  20. CentOS6.5 下Haproxy服务的安装与配置

热门文章

  1. Java课后总结2
  2. 实时搜索引擎Elasticsearch
  3. Android 隐藏和显示软键盘
  4. Oracle修改查询优化器版本
  5. MySQL 常用命令(4)------mysqladmin命令详解
  6. 时间序列 data_range()
  7. 在element plus中使用checkbox 多选框实现大区省市区选择回选
  8. 【Windows】查询端口占用并中止进程
  9. pg 窗口函数
  10. 莫凡Python之keras 2