我在春季批处理作业上有一个查询。我想在同一执行上下文中与另一个作业共享一个工作的数据。是否可以?如果是这样,那么如何?
我的要求是缓存。我有文件,其中存储了一些数据。我的工作每天运行,需要该文件的数据。我不想每天通过工作来阅读文件。我想将文件数据存储在缓存(哈希地图)中。因此,当第二天同一作业运行时,它将仅使用来自缓存的数据。是否可以在春季批处理?
欢迎您的建议。
您可以使用Spring Initialize Bean,该Bean在启动时初始化您的高速缓存。
将初始化bean添加到您的应用程序上下文;
<bean id="yourCacheBean" class="yourpackage.YourCacheBean" init-method="initialize">
</bean>
yourcachebean看起来像;
public class YourCacheBean {
private Map<Object, Object> yourCache;
public void initialize() {
//TODO: Intialize your cache
}
}
将初始化的bean与job.xml;
中的itemReader或itemprocessor或itemwriter一起。<bean id="exampleProcessor" class="yourpackage.ExampleProcessor" scope="step">
<property name="cacheBean" ref="yourCacheBean" />
</bean>
示例处理器看起来像;
public class ExampleProcessor implements ItemProcessor<String, String> {
private YourCacheBean cacheBean;
public String process(String arg0) {
return "";
}
public void setCacheBean(YourCacheBean cacheBean) {
this.cacheBean = cacheBean;
}
}
创建一个将文件导入数据库的作业。其他作业将使用数据库中的数据作为缓存。
另一种方法可能是将文件读取到映射&lt;>并序列化对象到文件,而不是在需要时去序列化(但我仍然更喜欢数据库作为缓存)
春季具有缓存注释,可能有助于这种情况,并且确实很容易实现。将执行对方法的第一个调用,然后将使用完全相同的参数调用相同的方法,该值将由缓存返回。
在这里您有一些教程:http://www.baeldung.com/spring-cache-tutorial
在您的情况下,如果您读取文件的呼叫始终具有相同的参数,则可以根据需要起作用。只需照顾TTL。