@Cacheable无法按预期在启动时加载内容

时间:2017-09-05 14:58:56

标签: java spring caching ehcache

我有这个实用工具方法来加载我的Web应用程序的内容

@Cacheable(value="dataStrore" )
public MarketJson retrieveMarketJson(DataRequest request) throws Exception{     
            try {   

.....

当通过普通Web请求调用此缓存时,缓存工作正常,但第一个请求确实需要很长时间,因为这涉及大量处理。

所以我添加了一个组件,我尝试在服务器启动时加载它。

@EventListener(ContextRefreshedEvent.class)
public void contextRefreshedEvent() {
  //call retrieveMarketJson method for all possible requests  
}

这显示在日志文件中可以正常工作,但是当Web请求进入时,看起来缓存没有发生,并且在那时加载和缓存,而不是前进工作正常。

我正在使用EHCache。

1 个答案:

答案 0 :(得分:1)

您可以尝试以下操作。方法initialize()将在应用程序初始化时运行。

@Component
public class InitializeCachedData {

    @Autowired
    private SampleService sampleService;

    @PostConstruct
    public void initialize() {
        // Call retrieveMarketJson method for all possible requests
        sampleService.callMethod();
    }
}

更新

您可以尝试使用ContextRefreshedEvent修改代码,以避免运行根上下文。

@EventListener(ContextRefreshedEvent.class)
public void contextRefreshedEvent(ContextRefreshedEvent e) {
    if (e.getApplicationContext().getParent() != null) {
        //call retrieveMarketJson method for all possible requests  
    }
}