iBATIS缓存的错误使用

标王2.0中用到了ibatis内置的缓存机制,昨天在自测时发现缓存不起作用,其实以前在bp和bss中都有遇到过这种情况,但一直都没太在意。今天仔细查下原因,发现了问题。

下面是bp中cacheMode的配置
<cacheModel id="MEMORY-CACHE" type="MEMORY" readOnly="true"
serialize="false">
<flushInterval hours="24" />
<property name="STRONG" value="STRONG" />
</cacheModel>


问题出现在<property name="STRONG" value="STRONG" />中,property name的配置中没有strong这个属性,所以这么配相当于是无效的。
正确的配置应该是<property name="reference-type" value="STRONG" /> 或 <property name=" referenceType " value="STRONG" />

再来看ibatis源码中是怎么读取这个配置的
private MemoryCacheLevel cacheLevel = MemoryCacheLevel.WEAK;
private Map cache = Collections.synchronizedMap(new HashMap());
public void configure(Properties props) {
String refType = props.getProperty("reference-type");
if (refType == null) {
refType = props.getProperty("referenceType");
}
if (refType != null) {
cacheLevel = MemoryCacheLevel.getByReferenceType(refType);
}
}

public void putObject(CacheModel cacheModel, Object key, Object value) {
Object reference = null;
if (cacheLevel.equals(MemoryCacheLevel.WEAK)) {
reference = new WeakReference(value);
} else if (cacheLevel.equals(MemoryCacheLevel.SOFT)) {
reference = new SoftReference(value);
} else if (cacheLevel.equals(MemoryCacheLevel.STRONG)) {
reference = new StrongReference(value);
}
cache.put(key, reference);
}


从以上代码中可以看到,当出现错误的配置时,cacheLevel使用了默认的 MemoryCacheLevel.WEAK,而weak类型的内存管理机制是只要jvm启动了垃圾
回收机制,缓存所使用的内存就被回收,相当于这种错误的配置使用ibatis缓存基本上是失效的。

目前bp、bss中好几处地方都用了这样的配置,包括违禁词、地区省市编号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值