介紹
ehcache是一個分布式緩存框架。
我們系統為了提高系統並發,性能、一般對系統進行分布式部署(集群部署方式)
不使用分布緩存,緩存的數據在各各服務單獨存儲,不方便系統開發。所以要使用分布式緩存對緩存數據進行集中管理。
mybatis無法實現分布式緩存,需要和其它分布式緩存框架進行整合。這里我主要介紹整合EhCache。下面開始實例。
實例
1.導入MyBatis-EhCache整合包
項目結構如下:
2.classpath下添加EhCache配置文件(ehcache.xml)
<ehcache>
<diskStore path="F:\cache_test" />
<defaultCache eternal="false" maxElementsInMemory="1000" timeToIdleSeconds="20" timeToLiveSeconds="20" overflowToDisk="true" maxEntriesLocalDisk="10000000" diskExpiryThreadIntervalSeconds="20" memoryStoreEvictionPolicy="LRU" />
</ehcache>
3.MyBatis配置文件(SqlMapConfig.xml)打開二級緩存
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
4.Mapper配置文件添加cache標簽
<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
5.緩存結果繼承序列化接口
public class User implements Serializable
測試
測試類如下:
package cn.pwc.test;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import cn.pwc.dao.UserMapper;
import cn.pwc.pojo.User;
public class Test {
public static void main(String[] args) {
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(Test.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml"));
SqlSession session = factory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.findById(1);
System.out.println(user.toString());
session.commit();
session.close();
SqlSession session2 = factory.openSession();
UserMapper mapper2 = session2.getMapper(UserMapper.class);
User user2 = mapper2.findById(1);
System.out.println(user2.toString());
session2.commit();
session2.close();
}
}
測試結果如下:
DEBUG [cn%002epwc%002edao%002e%0055ser%004dapper.data] net.sf.ehcache.store.disk.Segment - fault removed 0 from heap
DEBUG [cn%002epwc%002edao%002e%0055ser%004dapper.data] net.sf.ehcache.store.disk.Segment - fault added 0 on disk
版權聲明:本文為博主原創文章,未經博主允許不得轉載。