首页 » Java » ehcache、spring框架入门整合基于mybatis sql注解方式

ehcache、spring框架入门整合基于mybatis sql注解方式

原文 http://blog.csdn.net/weixin_39923425/article/details/79256550

2018-02-06 02:00:07阅读(441)

引言

由于项目中我负责的模板需要做权限相关的操作,每次校验都需要去访问数据库,这样会对数据库造成非常大不必要的压力,想了一下决定使用缓存,由于目前项目中用的东西并不多,所以就考虑在mybatis本身的二级缓存和ehcache中挑选一个。具体过程不在多言,最终确定使用Ehcache,由于配置过程中遇到挺多小问题,所以在此整理一篇文章记录下来,以便大家共同探讨。

正文 首先导入核心包:compile "net.sf.ehcache:ehcache-core:2.6.11"(本文采用的是gradle构建工具,别的可以到。Central Repository 中搜索自己查找)准备Ehcache的xml配置文件
<?xml version="1.0" encoding="UTF-8"?>    
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"> 
    <!-- Sets the path to the directory where cache .data files are created.
         If the path is a Java System Property it is replaced by
         its value in the running VM.
         The following properties are translated:
         user.home - User's home directory
         user.dir - User's current working directory
         java.io.tmpdir - Default temp file path -->
    <diskStore path="java.io.tmpdir"/>
    <!--Default Cache configuration. These will applied to caches programmatically created through
        the CacheManager.
        The following attributes are required for defaultCache:
        maxInMemory       - Sets the maximum number of objects that will be created in memory
        eternal           - Sets whether elements are eternal. If eternal,  timeouts are ignored and the element
                            is never expired.
        timeToIdleSeconds - Sets the time to idle for an element before it expires. Is only used
                            if the element is not eternal. Idle time is now - last accessed time
        timeToLiveSeconds - Sets the time to live for an element before it expires. Is only used
                            if the element is not eternal. TTL is now - creation time
        overflowToDisk    - Sets whether elements can overflow to disk when the in-memory cache
                            has reached the maxInMemory limit.
        -->
        <!-- 
    	diskSpoolBufferSizeMB:
    			磁盘缓存区大小,默认为30MB。每个Cache都应该有自己的一个缓存区
    	memoryStoreEvictionPolicy:
    			当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。
    			可选策略有:LRU(最近最少使用,默认策略)、FIFO(先进先出)、LFU(最少访问次数)
    	timeToIdleSeconds:
    			设置对象在失效前的允许闲置时间(单位:秒)
    	timeToLiveSeconds:
    			设置对象在失效前允许存活时间(单位:秒)
    	-->
        
    <defaultCache
        maxElementsInMemory="20000"
        eternal="false"
        overflowToDisk="true"
        diskPersistent="false" 
        diskSpoolBufferSizeMB="50" 
        timeToIdleSeconds="300" 
        timeToLiveSeconds="1800" 
        memoryStoreEvictionPolicy="LRU"
        />
        
</ehcache>
把Ehcache交给spring管理。需要一点注意的就是 如果是2.5版本以上,要修改shared属性的值为true,默认为false。否则会报错
<!-- 使用 ehcache配置 -->
	<bean id="ehCacheManager"
		class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
		<property name="configLocation" value="classpath:ehcache.xml" />
		 <!-- ehcache-core jar 2.5.0以上版本需要添加shared  -->
		<property name="shared" value="true"/> 
	</bean>
最后一步就是在你想要进行缓存的mapper上面添加注解
/**
 * 开启二级缓存
 * @project huihui-admin
 * @date 2018年1月30日 下午3:17:57 
 * @author Huaxu-charles
 */
@CacheNamespace(implementation=org.mybatis.caches.ehcache.EhcacheCache.class)
public interface DirectoryPrivilegeMapper {
    /**
     * 查询所有功能目录
     * @return
     */
    @Select({
        "SELECT id, name, url, pid, level FROM admin_directory_privilege"
    })
    @Results({
        @Result(column="id", property="id", jdbcType=JdbcType.SMALLINT, id=true),
        @Result(column="name", property="name", jdbcType=JdbcType.VARCHAR),
        @Result(column="url", property="url", jdbcType=JdbcType.VARCHAR),
        @Result(column="pid", property="pid", jdbcType=JdbcType.SMALLINT),
        @Result(column="level", property="level", jdbcType=JdbcType.SMALLINT)
    })
    List<Map<String, Object>> selectDirectorys();
至此,Ehcache框架就已经整合成功了,测试部分这里就不进行演示了。

最新发布

CentOS专题

关于本站

5ibc.net旗下博客站精品博文小部分原创、大部分从互联网收集整理。尊重作者版权、传播精品博文,让更多编程爱好者知晓!

小提示

按 Ctrl+D 键,
把本文加入收藏夹