Spring集成ehcache

1.导入jar包

ehcache-core-2.4.5.jar
ehcache-spring-annotations-1.2.0.jar(使用spring注解的形式配置时需要引入的jar包,依赖于guava)
ehcache-web-2.0.4.jar(做页面缓存需要用到)
guava-r09.jar(google推出可以帮助你写出更优雅代码的工具,和apache-commons差不多)
hibernate-ehcache-4.2.21.Final.jar(hibernate对于ehcache的支持)

2.编写ehcache.xml

将下载ehcache时附带的ehcache.xsd引入到工程中,我放在了src/config目录下

在classpath路径下新建xml文件,命名为ehcache.xml,然后其格式可以参考下载ehcache时附带的ehcache.xml,以下是我的配置







    
    

    
    


    
    
    


3.修改applicationContext.xml

修改applicationContext.xml用来集成ehcache。


    

    
    
        
    
    
    
        
    
配置完这个之后,整个applicationContext.xml长这样




    
    
        
        
    

    
    

    
    

    
    
        
    
    
    
        
    



    
    

    
    
        
        
        
        
    

    
    
    
    
    
    
    
    
    

    
    
    
    
    
    
    
    
    

    

    
        
    

    

    
    
        
        
        
        
        
        

        

        
            
                ${dataSource.dialect}
                ${dataSource.driverClassName}
                3
                18
                10
                ${dataSource.hbm2ddl.auto}
                ${dataSource.show_sql}
                ${dataSource.format_sql}
                
                none
            
        

        
            
                cn.limbo.entity
            
        
    

    

    
    
        
    


    


4.使用ehcache

配置完成之后使用ehcache就比较简单了,只要在需要缓存的地方加上@Cacheable标签就好了

但是需要注意的是,最好是在做查询的方法里使用ehcache,在做增删改的时候要清除缓存,这点比较重要,否则在并发情况下会出现数据的脏读和幻读之类的东西

一般在dao中的service层引入ehcache,使用方法如下:

package cn.limbo.service.impl;

import cn.limbo.dao.UserDao;
import cn.limbo.entity.User;
import cn.limbo.service.UserService;
import com.googlecode.ehcache.annotations.Cacheable;
import com.googlecode.ehcache.annotations.TriggersRemove;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * Created by limbo on 2016/11/26.
 */
@Service("userService")
@Transactional
public class UserServiceImpl implements UserService{

    @Autowired
    private UserDao userDao;


    @Override
    @Cacheable(cacheName = "sampleCache")
    public User getUserByID(int ID) {
        return userDao.getUserByID(ID);
    }

    @Override
    @Cacheable(cacheName = "sampleCache")
    public List getAllUsers() {
        return userDao.getAllUsers();
    }

    @Override
    @TriggersRemove(cacheName="sampleCache",removeAll=true)//清除缓存
    public void addUser(String name,String password) {
        User user = new User(name,password);
        userDao.save(user);
    }

    @Override
    @TriggersRemove(cacheName="sampleCache",removeAll=true)//清除缓存
    public void deleteUserByID(int ID) {
        userDao.delete(ID);
    }

    @Override
    @TriggersRemove(cacheName="sampleCache",removeAll=true)//清除缓存
    public void updateUser(User user) {
        userDao.update(user.getID(),user.getName(),user.getPassword());
    }

    @Override
    public boolean isExist(String userName) {
        if(userDao.getUserByName(userName) != null)
            return true;
        return false;
    }
}


5.总结

发现有两个坑点:
1.ehcache.xsd找不到,一开始网上给的解决方案都是改成http://ehcahce.org/ehcahce.xsd,但是我发现这样还是有问题的,后来发现我下载ehcache的时候附带了ehcahce.xsd,引入就好咯
2.使用cache的时候,@Cacheable(cacheName=""),使用的是在ehcache.xml自定义配置的ehcache名字,而不是在applicationContext.xml里面配置的bean的名字

源码我放到了github上: https://github.com/NetFilx/Google-Authenticator




你可能感兴趣的:(Spring)