findbycache问题

findbycache默认使用ehcache,如何换成其它cache呢

评论区

macaque

2017-07-27 16:23

linuxea

2017-07-27 16:37

这个问题本来我也想问的。总结起来就是jfinal支持两个或两个以上的cacheplugin吗。只要cachename不一样就可以,维护的ICache List多从一个地方添加cacheplugin。

杜福忠

2017-07-27 16:56

这样配置的:
ActiveRecordPlugin arp = new ActiveRecordPlugin(DbKit.MAIN_CONFIG_NAME, druidPlugin);
arp.setCache(new MyCache());

// 自己实现 接口 ICache 即可切换任何 Cache
public class MyCache implements ICache {
//.......
T get(String cacheName, Object key);
void put(String cacheName, Object key, Object value);
void remove(String cacheName, Object key);
void removeAll(String cacheName);
}

JFinal

2017-07-27 16:57

@杜福忠 这个是正解

杜福忠

2017-07-27 16:57

@杜福忠 之前研究过一下
http://www.jfinal.com/share/299

linuxea

2017-07-27 17:03

@杜福忠 我们的意思是项目运行时动态的从不同的cache中取数据。也就是能不能同时在项目中配置多个cache,我一下子用ehcahe,一下子用redis

杜福忠

2017-07-27 17:16

@linuxea
http://www.jfinal.com/share/299

这个例子刚好适合你说的场景 ,

如果想时时的改变, 还可以在上述例子中改写
private static String getCacheType() {
return PropKit.get("cache_type", "ehcache");
}

把 PropKit.get("cache_type", "ehcache");
改成 :
private static final ThreadLocal cache_type = new ThreadLocal();
private static String getCacheType() {
String cache_type = cache_type.get("cache_type")
return cache_type != null ? cache_type : "ehcache";
}

publicstatic String setCacheType(String cache_type) {
cache_type.set(cache_type);
}
//快捷
publicstatic String setCacheTypeEhcache() {
setCacheType("ehcache");
}
publicstatic String setCacheTypeXxxcache() {
setCacheType("xxxx");
}

外面同线程的地方 调用一下set即可了, 是不是很简单了?~ 点个赞呗~

JFinal

2017-07-27 20:56

@linuxea 每个 ActiveRecordPlugin 对象都拥有独立的 Cache 依赖配置,所以,如果你的需求是每个数据源拥有独立的 cache,这个天然就实现了。

如果你是希望每个数据源拥有多个不同的 cache,这个需要你自己写代码去控制

linuxea

2017-07-27 21:15

macaque

2017-07-28 10:07

@JFinal 对于Action的缓存 CacheInterceptor 是不是也得复写一个Redis的