spring 启动时的咖啡因缓存无法正常工作
Caffeine cache with spring boot not working
我已经设置了一个使用咖啡因缓存的场景,但我无法让它工作,真正的方法总是在参数相同时被调用。这是我的配置:
pom.xml
...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
</dependency>
...
CacheManager
的配置class
@Configuration
@EnableCaching
public class CachingConfig {
public static final String CACHE_NAME = "test";
@Bean
public CacheManager cacheManager() {
CaffeineCacheManager cacheManager = new CaffeineCacheManager(CACHE_NAME);
cacheManager.setCaffeine(caffeineConfig());
return cacheManager;
}
private Caffeine caffeineConfig() {
return Caffeine.newBuilder()
.expireAfterAccess(10, TimeUnit.MINUTES)
.maximumSize(1024 * 1024 * 256);
}
}
然后 class 使用可缓存的方法:
@CacheConfig(cacheNames = {CachingConfig.CACHE_NAME})
public class MyClass{
@Cacheable
public Object cacheableMethod(String a, String b, Boolean c) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return new Object()
}
我也试过将缓存名称添加到 Cacheable 注释中:
@Cacheable(value = CachingConfig.CACHE_NAME)
并将 @EnableCaching
移动到 Spring 引导主应用程序 class。
真正的方法总是被调用。
我做错了什么?
谢谢
@Cacheable 方法必须位于@Bean、@Component、@Service...
我已经设置了一个使用咖啡因缓存的场景,但我无法让它工作,真正的方法总是在参数相同时被调用。这是我的配置:
pom.xml
...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
</dependency>
...
CacheManager
的配置class@Configuration
@EnableCaching
public class CachingConfig {
public static final String CACHE_NAME = "test";
@Bean
public CacheManager cacheManager() {
CaffeineCacheManager cacheManager = new CaffeineCacheManager(CACHE_NAME);
cacheManager.setCaffeine(caffeineConfig());
return cacheManager;
}
private Caffeine caffeineConfig() {
return Caffeine.newBuilder()
.expireAfterAccess(10, TimeUnit.MINUTES)
.maximumSize(1024 * 1024 * 256);
}
}
然后 class 使用可缓存的方法:
@CacheConfig(cacheNames = {CachingConfig.CACHE_NAME})
public class MyClass{
@Cacheable
public Object cacheableMethod(String a, String b, Boolean c) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return new Object()
}
我也试过将缓存名称添加到 Cacheable 注释中:
@Cacheable(value = CachingConfig.CACHE_NAME)
并将 @EnableCaching
移动到 Spring 引导主应用程序 class。
真正的方法总是被调用。
我做错了什么?
谢谢
@Cacheable 方法必须位于@Bean、@Component、@Service...