spring+Mybatis+Ehcache整合

阅读更多

项目用到spring+mybatis框架,弄了一上午的spring+ehcache的整合,就是不见效果,后来发现Mybatis与Ehcache整合也需要进行配置,两个都配置会大大降低数据库压力。下面把我的配置过程写下来供大家参考。

 

1. 下载mybatis相关包与ehcache相关包

下载地址为:https://github.com/mybatis/ehcache-cache/releases

2. 在Map文件中打开echached效果,userMapper.xml文件内容如下:

 




              
	
	
	......

 3. 配置ehcache.xml 

 

  

     
   
        
      
    ......

 参数说明:

 

  

4. 配置applicationContext-ehcache.xml

 





	

	

	
		
	
	
	
		
	

 5. 在spring-mvc.xml 中加入如下内容,将ehcache相关配置装配到spring容器中:

 

 

  
    

 6. 在userServiceImpl.java中加入通过注解进行配置:

 

 

        @Cacheable(cacheName="userCache")  //这里的cacheName要跟ehcache.xml中保持一致
	public List getUserList(User user, Map map) {
		long l1 = new Date().getTime();

		List list = userMapper.getUserList(user);
		Integer listSize = userMapper.getUserCount(user);

		long l2 = new Date().getTime();
		System.out.println("++++++++++++total time use: " + (l2-l1));

		map.put("rows", list);
		map.put("total", listSize);

		return list;
	}

 

 

到此spring+mybatis+EHCache配置完成。可以对比在加上@Cacheable(cacheName="userCache")和不加的两种情况下的(l2-l1)的时间,在我本地如果不加用时在40ms左右,加上之后第一次加载是40ms,第二次用时1ms,说明第一次加载的数据已经被放到缓存当中去,可见效率得到极大提升。

 

 

 

拓展说明:

对于清除缓存的方法,ehcache提供了两种,一种是在ehcache.xml中配置的时间过后自动清除,一种是在数据发生变化后触发清除。个人感觉第二种比较好。可以将 

@TriggersRemove(cacheName="userCache",removeAll=true)

@TriggersRemove(cacheName="userCache", when=When.AFTER_METHOD_INVOCATION, removeAll=true) 

这句代码加到service里面的添加、删除、修改方法上。这样只要这几个方法有调用,缓存自动清除。

 

对于Mybatis更简单,对不想缓存的sql结果,可以再后面添加useCache="false"即可:

  

 

你可能感兴趣的:(spring+Mybatis+Ehcache整合)