如果雙方都用ehcache作爲緩衝庫的話,對於cachemanger的設定會產生衝突,因爲如果沒有給shiro的EhCacheManager設定cachemanager的話,會創建一個默認名稱的cachemanager,而spring的cache自動配置也同樣會創建一個默認名稱的cachemanager,由於ehcache2.5以後,不允許同一個jvm上存在兩個同樣名字的cachemanager,所以會報錯。
解決的方法有兩個,一個是自定義配置java文件,把名稱改爲另外一個,或者乾脆就用同一個cachemanager。
下面是用同一個cachemanager時的配置方法。
@Bean(name = "ehcache")
public EhCacheManagerFactoryBean ehCacheManagerFactoryBean(){
EhCacheManagerFactoryBean ehCacheManagerFactoryBean = new EhCacheManagerFactoryBean();
ehCacheManagerFactoryBean.setConfigLocation(new ClassPathResource("ehcache.xml"));
ehCacheManagerFactoryBean.setShared(true);
return ehCacheManagerFactoryBean;
}
@Bean(name = "cacheManager")
public EhCacheCacheManager ehCacheCacheManager(){
EhCacheCacheManager ehCacheCacheManager = new EhCacheCacheManager();
ehCacheCacheManager.setCacheManager(ehCacheManagerFactoryBean().getObject());
return ehCacheCacheManager;
}
@Bean(name = "ehCacheManager")
@DependsOn("lifecycleBeanPostProcessor")
public EhCacheManager ehCacheManager(){
EhCacheManager ehCacheManager = new EhCacheManager();
ehCacheManager.setCacheManager(ehCacheManagerFactoryBean().getObject());
return ehCacheManager;
}