在mybatis中,有一级缓存和二级缓存,其中二级缓存主要针对的一个namespace级别的缓存控制,按照mybatis的配置说明,只要按照规范实现org.apache.ibatis.cache.Cache,就可以作为二级缓存使用。
apache这些年还出了一个功能强大的缓存框架ignite,针对mybatis有一个缓存的实现类org.mybatis.caches.ignite.IgniteCacheAdapter,此类的maven位置如下:
<dependency>
<groupId>org.mybatis.caches</groupId>
<artifactId>mybatis-ignite</artifactId>
<version>1.0.5</version>
</dependency>
当然引入这个包之前,需要依赖spring配置,mybatis配置和ignite配置。
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.ignite</groupId>
<artifactId>ignite-core</artifactId>
<version>${ignite.version}</version>
</dependency>
<dependency>
<groupId>org.apache.ignite</groupId>
<artifactId>ignite-spring</artifactId>
<version>${ignite.version}</version>
</dependency>
<dependency>
<groupId>org.apache.ignite</groupId>
<artifactId>ignite-indexing</artifactId>
<version>${ignite.version}</version>
</dependency>
其中:
<ignite.version>2.1.1</ignite.version>
spring配置略...
public IgniteCacheAdapter(String id) {
// id属性一般为mapper.xml文件的namespace,避免重复
if (id == null)
throw new IllegalArgumentException("Cache instances require an ID");
CacheConfiguration cacheCfg = null;
try {
DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
new XmlBeanDefinitionReader(factory).loadBeanDefinitions(new FileSystemResource(new File(CFG_PATH)));
cacheCfg = (CacheConfiguration) factory.getBean("templateCacheCfg");
cacheCfg.setEvictionPolicy(null);
cacheCfg.setCacheLoaderFactory(null);
cacheCfg.setCacheWriterFactory(null);
// overrides template cache name with the specified id.
// 针对每个namespace有一个cacheCfg,保证不同的表在不同的二级缓存实例中
cacheCfg.setName(id);
} catch (NoSuchBeanDefinitionException | BeanDefinitionStoreException e) {
// initializes the default cache.
log.warn("Initializing the default cache. Consider properly configuring '" + CFG_PATH + "' instead.");
cacheCfg = new CacheConfiguration(id);
}
cache = ignite.getOrCreateCache(cacheCfg);
this.id = id;
}
配置之后即可使用