java - 在 Spring 的服务器启动期间,如何在缓存中使用填充的数据?
问题描述
我在 Spring-4 应用程序中从另一个可缓存方法调用可缓存方法时遇到问题,请阅读以下步骤以获得更多说明。
1) MyAppStartup 类在服务器启动时调用,它调用 convertXMLToObject 方法并将数据存储在 myInfo 缓存中。
2) 从某个控制器调用 getFormList(String myId) 方法,理想情况下,此方法不会调用 convertXMLToObject() 方法,因为在步骤 1 中,数据已经在缓存中,但无法正常工作。
3) 当第二次调用 getFormList(String myId) 时,它没有被调用并且数据从缓存中返回,即缓存对于这个方法工作正常。
@Component
public class MyAppStartup {
@Autowired
private MyHelperClass myHelperClass;
@EventListener(ContextRefreshedEvent.class)
public void contextRefreshedEvent() throws Exception {
logger.debug("Application Started :: Call to load XML information into Cache");
myHelperClass.convertXMLToObject();
}
}
@Service
public class MyHelperClass {
@Cacheable(value = "myInfoById", key = "{#myId}")
public List<XMLFormData> getFormList(String myId){
List<XMLFormData> xmlFormData = convertXMLToObject();
return xmlFormData;
}
@Cacheable(value = "myInfo")
public List<XMLFormData> convertXMLToObject() {
//code to read xml and populate into java pojo class and return list
}
}
//configuration in ehcache.xml
<cache name="myInfoById"
eternal="false"
overflowToDisk="false"
maxEntriesLocalHeap="1000"
timeToIdleSeconds="0"
timeToLiveSeconds="0"
memoryStoreEvictionPolicy="LRU" />
<cache name="myInfo"
eternal="false"
overflowToDisk="false"
maxEntriesLocalHeap="1000"
timeToIdleSeconds="0"
timeToLiveSeconds="0"
memoryStoreEvictionPolicy="LRU" />
请帮忙,在此先感谢:)
解决方案
我得到了解决方案,而不是从另一个可缓存方法“getFormList(String myId)”调用可缓存方法“convertXMLToObject()”,只需从调用方法“getFormList(String myId)”的地方调用convertXMLToObject()方法并通过要求数据到方法“getFormList(String myId)”。
推荐阅读
- javascript - 如何将一个参数的数据传递给具有两个参数的函数?
- ios - 完整应用安装后的应用剪辑推送通知
- javascript - Node.js/MongoDB 网站 - ReferenceError:未定义过滤器
- angular - 我可以在 Angular 组件中监听 Vue 事件吗
- python - 如何在 tensorflow lite 中转换 conv3d 层(量化)?
- python - 为什么 Python 中的这个 Rabin-Karp 代码这么慢?
- python-3.x - Lamnda Python 3.8 GPG解密找不到gpg二进制
- c# - 新鲜的 .net web api 解决方案为 WeatherForecastController 返回 401
- python - 与 python os.chdir 的本地目录相比,基于网络的目录存在问题
- go - 如何使用 govmomi 客户端 API 获取 vCenter 版本?