为什么80%的码农都做不了架构师?>>>
在项目中使用ehcache 缓存,启动tomcat 突然报这个错误。
找了下原因是因为 一个tomcat 下 有两个应用,但是ehcache<diskStore path="../temp" /> 路径设置的是同一个,就会报错。修改path 使两个应用的path路径不一样就可以了。
ehcache的原理是将所有的value值序列化后存储到本地磁盘,将一个与之对应的key值存到内存中,建立两者关联。这样就能根据key查找磁盘中的value了,当value值找不到时,或者序列化异常时就出现了你的问题。出现原因一般是这样子:value默认存储到tomcat临时目录tmp下(不同服务器不同系统该路径不同,参考 @红薯 /question/12_2368),当tomcat下多个实例同时往这个目录下写入缓存时,就容易出现问题了。解决方案是指定下diskStore 目录为不同的目录。
通过修改diskStore path="${ehcache.dir.tmp}" ,注意参数ehcache.dir.tmp要进行配置,如修改weblogic的启动脚本或配置脚本setDomainEnv.cmd,setDomainEnv.sh 增加参数:-Dehcache.dir.tmp=路径。tomcat修改方式类似。