可以通过以下步骤实现在Spring Boot项目中使用Spring Cache+EHcache+MemoryCache注解自定义过期时间:
- 首先,在POM.xml文件中添加以下依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache-core</artifactId>
<version>2.6.11</version>
</dependency>
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>3.0.4</version>
</dependency>
- 然后,在application.properties文件中配置EHcache和MemoryCache的缓存策略,例如:
spring.cache.type=ehcache
# ehcache配置
spring.cache.ehcache.config=classpath:ehcache.xml
# MemoryCache配置
spring.cache.caffeine.spec=maximumSize=100,expireAfterAccess=60s
其中,ehcache.xml是一个EHcache配置文件,可以根据需要进行自定义配置。
- 接下来,在需要使用缓存的方法上添加@Cacheable注解,并指定缓存名称和过期时间,例如:
@Cacheable(value = "userCache", key = "#id",
cacheManager = "cacheManager",
condition = "#id != null",
unless = "#result == null",
cacheResolver = "cacheResolver")
public User getUserById(Integer id) {
// 根据ID从数据库中获取用户信息
return userDao.selectByPrimaryKey(id);
}
在上述注解中,value指定缓存名称,key指定缓存键值(这里用ID作为键值),cacheManager指定使用的缓存管理器,condition和unless可以对缓存进行条件控制。
- 最后,在配置文件中添加Spring Cache相关的bean定义:
@Configuration
@EnableCaching
public class CacheConfig {
@Bean
public CacheManager ehCacheManager() {
return new EhCacheCacheManager(ehCacheFactory().getObject());
}
@Bean
public EhCacheManagerFactoryBean ehCacheFactory() {
EhCacheManagerFactoryBean factoryBean = new EhCacheManagerFactoryBean();
factoryBean.setConfigLocation(new ClassPathResource("ehcache.xml"));
factoryBean.setShared(true);
return factoryBean;
}
@Bean
public CacheManager memoryCacheManager() {
CaffeineCacheManager cacheManager = new CaffeineCacheManager("userCache");
cacheManager.setCaffeine(caffeineCacheBuilder());
return cacheManager;
}
@Bean
public Caffeine caffeineCacheBuilder() {
return Caffeine.newBuilder()
.expireAfterAccess(Duration.ofMinutes(5))
.maximumSize(100)
.recordStats();
}
@Bean
public CompositeCacheManager cacheManager() {
CompositeCacheManager cacheManager = new CompositeCacheManager();
List<CacheManager> managers = new ArrayList<>();
managers.add(ehCacheManager());
managers.add(memoryCacheManager());
cacheManager.setCacheManagers(managers);
return cacheManager;
}
@Bean
public CacheResolver cacheResolver() {
return new SimpleCacheResolver(ehCacheManager(), memoryCacheManager());
}
}
上述代码中,首先通过@EnableCaching注解启用Spring Cache功能,并定义了两种缓存管理器:EHcache和MemoryCache。然后,定义了一个CompositeCacheManager来管理这两个缓存管理器,并实现了一个CacheResolver来解析缓存,以便支持使用不同的缓存管理器进行缓存操作。
总结
通过以上步骤,在Spring Boot项目中就可以使用Spring Cache+EHcache+MemoryCache注解自定义过期时间了。在具体使用时,需要根据实际情况对配置进行适当调整,使其符合项目需求。