今天小编给大家整理了springboot+mybatis集成自定义缓存ehcache用法笔记,希望对大家能有所办帮助! 一、ehcache介绍EhCache 是一个纯Java的进程内缓存管理框架,属于开源的Java分布式缓存框架,主要用于通用缓存,Java EE和轻量级容器。1、特点6. 可以通过RMI、可插入API等方式进行分布式缓存8. 支持多缓存管理器实例,以及一个实例的多个缓存区域2、应用场景- 适合缓存内容不大的场景,比如MyBatis自定义缓存、系统配置信息、页面缓存。
二、springboot+mybatis集成ehcache步骤Spring Boot 的缓存机制高速缓存抽象不提供实际存储,并且依赖于由org.springframework.cache.Cache和org.springframework.cache.CacheManager接口实现的抽象。 Spring Boot根据实现自动配置合适的CacheManager,只要缓存支持通过@EnableCaching注解启用即可。1、添加ehcache.xml配置文件<?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi="http://www./2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http:///ehcache.xsd"> <diskStore path="java.io.tmpdir" />
<!-- 配置提供者 1、peerDiscovery,提供者方式,有两种方式:自动发现(automatic)、手动配置(manual) 2、rmiUrls,手动方式时提供者的地址,多个的话用|隔开 --> <cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" properties="peerDiscovery=manual,rmiUrls=//127.0.0.1:40002/userCache" /> <!-- <cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory" properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1, multicastGroupPort=4446,timeToLive=255"/> --> <!-- 配置监听器 1、hostName 主机地址 2、port 端口 3、socketTimeoutMillis socket子模块的超时时间,默认是2000ms --> <cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory" properties="hostName=127.0.0.1, port=40001, socketTimeoutMillis=2000" /> <!-- <cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"/> -->
<defaultCache eternal="false" maxElementsInMemory="1000" overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0" timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU" />
<cache name="userCache" maxElementsInMemory="1000" eternal="false" timeToIdleSeconds="300" timeToLiveSeconds="300" overflowToDisk="false" memoryStoreEvictionPolicy="LRU">
<!-- 配置缓存事件监听器 replicateAsynchronously 操作是否异步,默认值为true. replicatePuts 添加操作是否同步到集群内的其他缓存,默认为true. replicateUpdates 更新操作是否同步到集群内的其他缓存,默认为true. replicateUpdatesViaCopy 更新之后的对象是否复制到集群中的其他缓存(true); replicateRemovals 删除操作是否同步到集群内的其他缓存,默认为true. --> <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" properties=" replicateAsynchronously=true, replicatePuts=true, replicateUpdates=true, replicateUpdatesViaCopy=true, replicateRemovals=true " />
<!-- 初始化缓存,以及自动设置 --> <bootstrapCacheLoaderFactory class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory" properties="bootstrapAsynchronously=true" />
</cache>
</ehcache>
2、配置 application.properyies#cache 配置cache
spring.cache.cache-names=userCache spring.cache.jcache.config=classpath:ehcache.xml
3、springboot启动类增加注解@EnableCaching@SpringBootApplication @ComponentScan(basePackages="com.ehcache")//扫描组件 @EnableCaching public class EhcacheTestApplication {
public static void main(String[] args) { SpringApplication.run(EhcacheTestApplication.class, args); } }
4、UserInfoService.java 文件增加缓存注解
@Service public class UserInfoService {
@Autowired private UserDao userDao;
@CacheEvict(key="'user_'+#uid", value="userCache") public void del(String uid) { userDao.del(uid); }
@CachePut(key="'user_'+#user.id", value="userCache") public void update(User user) { userDao.update(user); }
@Cacheable(key="'user_'+#id",value="userCache") public User getUserById(String id){ return userDao.findById(id); }
@CacheEvict(key="'user'",value="userCache") public String save(User user) { return userDao.save(user); } }
5、增加测试控制器TestController.javapackage com.ehcache.controller;
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CachePut; import org.springframework.cache.annotation.Cacheable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController;
import com.ehcache.entity.User; import com.ehcache.factory.CacheManagerFactory; import com.ehcache.factory.UserFactory; import com.ehcache.service.UserService; import com.google.gson.Gson;
import net.sf.ehcache.Element;
@RestController @RequestMapping("/CacheTest") public class CacheTestController { @Autowired private UserService userService; Gson gson = new Gson(); CacheManagerFactory cmf = CacheManagerFactory.getInstance(); @RequestMapping(value = "/test", method = RequestMethod.GET) public String test(HttpServletRequest request){ // 新增新用户 String id = userService.save(UserFactory.createUser()); User user = userService.getUserById(id); user.setUsername("小明"); userService.update(user); // 查询该用户 System.out.println(gson.toJson(user, User.class)); System.out.println(); // 再查询该用户 User user = userService.getUserById(uid); System.out.println(gson.toJson(user, User.class)); System.out.println(); // 更新该用户 userService.update(user); // 更新成功后再查询该用户 System.out.println(gson.toJson(userService.getUserById(id), User.class)); System.out.println(); // 删除该用户 userService.del(id); System.out.println(); // 删除后再查询该用户 System.out.println(gson.toJson(userService.getUserById(id), User.class)); return id; } }
IT技术分享社区 个人博客网站:https://
|