使用ehcache持久化数据时,老是读不了旧数据

在网上查了各种解决办法,目前在web加了配置,手动System.setProperty("net.sf.ehcache.enableShutdownHook", "true"),读之前调用flush,删除和设置后也调用了flush,发现在jfinalconfig里面就可以,而且重新设置必须得先删除原有的数据,代码如下:

HashMap<Integer, User> map = (HashMap<Integer, User>) CacheManager.me.getCache(CacheNames.PERSISTENT, "test");

if (map == null) {

System.out.println("ssssss");

map = new HashMap<Integer, User>();

CacheManager.me.setCache(CacheNames.PERSISTENT, "test", map);

User u = new User();

u.userId = 1;

map.put(u.userId, u);

} else {

System.out.println(map.size());

User u = new User();

u.userId = 1;

CacheManager.me.deleteCache(CacheNames.PERSISTENT, "test");

CacheManager.me.setCache(CacheNames.PERSISTENT, "test", map); 

map.put(u.userId, u);

map.put(2, u);

}


在其他地方就各种不灵了,连上面的代码都受到影响,一时可以一时不可以的。心态都崩了妈的。另外我看他们说System.setProperty("net.sf.ehcache.enableShutdownHook", "true")这行还需要设置环境变量,要怎么设置。反编译出来吧,代码各种bug,直接放弃了。求大神帮帮忙,好人一生平安。


评论区

JFinal

2018-06-06 18:00

别的地方的用法,为啥出错,这个外人不好猜测,建议直接用 jfinal 的 EhcachePlugin,这个插件是可以独立于 jfinal 使用的,只需要你手动调用一下它的 star() 方法

小喇叭

2018-06-06 18:07

@JFinal 不是别的项目,是同一个项目的service层,代码这样的users = CacheManager.me.getCache(CacheNames.PERSISTENT, CacheKeys.USER);
if (users == null) {
users = new HashMap();
}
CacheManager.me.deleteCache(CacheNames.PERSISTENT, CacheKeys.USER);
CacheManager.me.setCache(CacheNames.PERSISTENT, CacheKeys.USER, users);每次都读不了旧数据,偶尔有一次能读到,里面也是空的

小喇叭

2018-06-06 18:10

@JFinal 我是想重新生成ehcache那个jar包,发现发编译出来bug太多

JFinal

2018-06-06 18:42

@小喇叭 这个问题确实不知道原因,单步调试一下

小喇叭

2018-06-06 19:00

@JFinal 谢谢波哥

热门反馈

扫码入社