1 问题
springboot多模块项目,本身架构使用的redis缓存,因功能需要移植进了一个带有ehcache缓存的模块(并非二级缓存),造成了项目缓存冲突,redis缓存存取异常。
2 解决
进行了很多的尝试过后,发现当项目启动扫描到ehcache.xml时,以注解方式使用redis缓存会出现缓存分区判断异常的状况。
可行的解决方案是,不使用ehcache.xml配置文件,改用Java代码对ehcache缓存进行配置。
ehcache配置代码参考:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| Configuration configuration = new Configuration() .diskStore(new DiskStoreConfiguration().path("java.io.tmpdir")) .cacheManagerPeerProviderFactory(new FactoryConfiguration<FactoryConfiguration<?>>() .className(RMICacheManagerPeerProviderFactory.class.getName()) .properties("peerDiscovery=manual,rmiUrls=//localhost:40004/metaCache|//localhost:40005/metaCache") ) .cacheManagerPeerListenerFactory(new FactoryConfiguration<FactoryConfiguration<?>>() .className(RMICacheManagerPeerListenerFactory.class.getName()) .properties("port=40004,socketTimeoutMillis=2000") .cache(new CacheConfiguration("metaCache", 10000) .memoryStoreEvictionPolicy(MemoryStoreEvictionPolicy.LFU) .timeToIdleSeconds(1000) .timeToLiveSeconds(2000) .eternal(false) .diskExpiryThreadIntervalSeconds(120) .persistence(new PersistenceConfiguration().strategy(PersistenceConfiguration.Strategy.NONE)).maxEntriesLocalDisk(0) .cacheEventListenerFactory(new CacheConfiguration.CacheEventListenerFactoryConfiguration().className(RMICacheReplicatorFactory.class.getName())) ); CacheManager manager = CacheManager.create(configuration); Cache cache = manager.getCache("metaCache");
|