我有这个实用工具方法来加载我的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。
答案 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
}
}