为什么事务不提交,二级缓存就不会生效呢?
看下面的源代码
public class TransactionalCacheManager {
private final Map<Cache, TransactionalCache> transactionalCaches = new HashMap<>();
mybatis的二级缓存是由TransactionalCacheManager这个类来管理的,但是真正操作commit(),putObject的是TransactionalCache这个类。
那为什么事务不提交,二级缓存就不会生效呢?
//TransactionalCacheManager
public void commit() {
for (TransactionalCache txCache : transactionalCaches.values()) {
txCache.commit();
}
}
public void commit() {
if (clearOnCommit) {
delegate.clear();
}
flushPendingEntries(); //只有执行力commit才会执行该方法
reset();
}
//把数据写入缓存的方法
private void flushPendingEntries() {
for (Map.Entry<Object, Object> entry : entriesToAddOnCommit.entrySet()) {
delegate.putObject(entry.getKey(), entry.getValue());
}
for (Object entry : entriesMissedInCache) {
if (!entriesToAddOnCommit.containsKey(entry)) {
delegate.putObject(entry, null);
}
}
}