Spring @Cacheable创建代理被忽略

时间:2018-06-20 11:16:01

标签: java spring spring-boot caching proxy

我对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加载过程中错过一些东西,但是我不知道该寻找什么。

有人可以给我任何建议吗?

谢谢您的时间。

0 个答案:

没有答案