最近数据库访问量太大,于是加了缓存
同样的缓存配置,有一个工程缓存正常生效,但另一个工程里却不生效
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
<version>2.7.2</version>
</dependency>
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>3.1.8</version>
</dependency>
@Configuration
@EnableCaching
public class CacheConfig {
@Bean
public CacheManager cacheManager() {
CaffeineCacheManager caffeineCacheManager = new CaffeineCacheManager();
caffeineCacheManager.setCaffeine(Caffeine.newBuilder()
.initialCapacity(1000)
.maximumSize(100000)
.expireAfterWrite(5, TimeUnit.MINUTES));
return caffeineCacheManager;
}
}
在org.springframework.cache.interceptor类里加断点,发现没进去,说明拦截器都没生效
最后查资料找到原因:
Spring 使用 AOP 来实现缓存功能,因此需要确保方法调用是通过代理进行的。如果方法是在同一个类内部调用的,那么 AOP 代理不会生效。你可以将方法调用移到另一个服务类中,或者使用 @EnableAspectJAutoProxy(proxyTargetClass = true) 启用基于类的代理