首页 > 解决方案 > 在 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" />

请帮忙,在此先感谢:)

标签: javaspringspring-mvcehcache-2

解决方案


我得到了解决方案,而不是从另一个可缓存方法“getFormList(String myId)”调用可缓存方法“convertXMLToObject()”,只需从调用方法“getFormList(String myId)”的地方调用convertXMLToObject()方法并通过要求数据到方法“getFormList(String myId)”。


推荐阅读