簡體   English   中英

如何在 Spring 中的服務器啟動期間使用緩存中的填充數據?

[英]How can i use populated data in cache during server startup in Spring?


我在 Spring-4 應用程序中從另一個可緩存方法調用可緩存方法時遇到問題,請閱讀以下步驟以獲得更多說明。
1) MyAppStartup class 在服務器啟動時調用,它調用 convertXMLToObject 方法並將數據存儲在 myInfo 緩存中。
2) 從一些 controller 調用 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)”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM