我对Spring @Cacheable注解有一些问题。在创建用于缓存管理的代理时将忽略该消息。
我的情况是下一个...
我的团队为我们的应用程序使用 Spring Boot(2.0)。 对于某些服务,我们将缓存与 Ehcache 3 一起使用。 接下来是 Maven 模块的结构:
/
+- cache-lib
|
+- service-lib // depend on cache-lib
|
+- app-module // depend on service-lib
缓存库是一个模块,具有用于缓存的常见配置的配置类:
@Slf4j
@Configuration
@EnableCaching
@EnableConfigurationProperties(CustomCacheProperties.class)
public class CommonCacheConfig implements JCacheManagerCustomizer {
@Autowired
private CustomCacheProperties cacheProperties;
@Override
public void customize(javax.cache.CacheManager cacheManager) {
addCachesFromConfiguration(cacheManager, cacheProperties);
}
...
}
在 service-lib 中,有一项服务使用存储库对象查询数据库。
@Slf4j
public class DataServiceImpl implements DataService {
private final DataRepository dataRepository;
public DataServiceImpl(DataRepository dataRepository) {
this.dataRepository = dataRepository;
}
@Override
@Cacheable("DATA_CACHE")
public Data getData() {
log.info("Reloading data...");
return dataRepository.getData();
}
}
配置:
@Configuration
@EntityScan(basePackageClasses = Data.class)
@EnableJpaRepositories(basePackageClasses = DataRepository.class)
@Import(CommonCacheConfig.class)
@PropertySource("classpath:cache/data-service-cache.properties")
public class DataServiceConfig {
@Bean
public DataService dataService(DataRepository dataRepository) {
return new DataServiceImpl(timeShiftRepository);
}
}
根据this page,创建具有 @Cacheable 注释代理的类(如 @Transactional 一样)。但是,当我在 app-module 中调试 DataService 时,找不到任何代理。 Spring将这个bean作为POJO管理。当我在应用程序中的任何地方使用 DataService 时,每次使用它时都会调用存储库。例如:
@Slf4j
@SpringBootApplication
@Import(DataServiceConfig.class)
public class App implements CommandLineRunner {
@Autowired
private DataService dataService;
public static void main(String... args) {
SpringApplication.run(App.class, args);
}
@Override
public void run(String... args) throws Exception {
log.info("Data: {}", dataService.getData());
log.info("Data: {}", dataService.getData());
}
}
此输出为:
...
2018-06-20 12:47:13.054 INFO 9805 --- [main] org.ehcache.core.EhcacheManager : Cache 'DATA_CACHE' created in Eh107InternalCacheManager.
...
2018-06-20 12:47:24.299 INFO 9805 --- [main] com.example.service.DataServiceImpl : Reloading data...
2018-06-20 12:47:24.300 INFO 9805 --- [main] com.example.App : Data: {...}
2018-06-20 12:47:24.302 INFO 9805 --- [main] com.example.service.DataServiceImpl : Reloading data...
2018-06-20 12:47:24.303 INFO 9805 --- [main] com.example.App : Data: {...}
我想念什么? 我想我应该在bean加载过程中错过一些东西,但是我不知道该寻找什么。
有人可以给我任何建议吗?
谢谢您的时间。