@Cacheable添加失效时间的多种方法
时间: 2023-07-26 08:27:45 浏览: 160
除了使用Spring提供的CacheManager对象设置失效时间,还有其他几种方法可以为@Cacheable注解添加失效时间。
1. 使用Spring Boot的配置属性
如果使用Spring Boot,可以通过在application.properties或application.yml配置文件中添加属性来设置缓存失效时间。例如:
```yaml
spring.cache.cache-names=myCache
spring.cache.caffeine.spec=expireAfterWrite=60s
```
其中,cache-names属性指定缓存名称,caffeine.spec属性指定缓存策略。这里使用的是Caffeine缓存,expireAfterWrite表示缓存数据的有效时间为60秒。
2. 在缓存配置类中设置失效时间
如果使用了自定义的缓存配置类,可以在该类中设置缓存失效时间。例如:
```java
@Configuration
@EnableCaching
public class CacheConfig extends CachingConfigurerSupport {
@Override
public CacheManager cacheManager() {
CaffeineCacheManager cacheManager = new CaffeineCacheManager("myCache");
cacheManager.setCaffeine(caffeineCacheBuilder());
return cacheManager;
}
private Caffeine<Object, Object> caffeineCacheBuilder() {
return Caffeine.newBuilder()
.expireAfterWrite(60, TimeUnit.SECONDS)
.maximumSize(1000)
.recordStats();
}
}
```
在上面的示例中,使用了CaffeineCacheManager作为缓存管理器,缓存名称为myCache,缓存策略为expireAfterWrite(60, TimeUnit.SECONDS),表示缓存数据的有效时间为60秒。
3. 在方法上使用注解
如果需要为不同的方法设置不同的缓存失效时间,可以在方法上使用@Cacheable注解,同时指定缓存策略。例如:
```java
@Cacheable(value = "myCache", key = "#id", cacheManager = "cacheManager", unless = "#result == null")
@CacheConfig(cacheNames = "myCache", cacheManager = "cacheManager")
public MyObject getMyObject(String id) {
// method body
}
@CacheConfig(cacheNames = "myCache", cacheManager = "cacheManager", cacheResolver = "cacheResolver")
public class MyService {
@Cacheable(key = "#id", cacheResolver = "cacheResolver", unless = "#result == null")
public MyObject getMyObject(String id) {
// method body
}
@Bean
public CacheResolver cacheResolver(CacheManager cacheManager) {
SimpleCacheResolver cacheResolver = new SimpleCacheResolver(cacheManager);
cacheResolver.setCacheNames(Collections.singleton("myCache"));
cacheResolver.setDefaultExpiration(60);
return cacheResolver;
}
}
```
在上面的示例中,使用了@CacheConfig注解为整个类设置了缓存管理器和缓存名称。在getMyObject方法上使用了@Cacheable注解,同时指定了缓存策略。可以看出,使用注解的方式更加灵活,但也需要更多的配置工作。
阅读全文