我有一个关于Spring Batch Job的查询。 我想在同一个执行上下文中与另一个作业共享一个作业的数据。可能吗?如果是这样,那怎么样?
我的要求是缓存。我有文件,存储一些数据。我的工作每天都在运行,需要该文件的数据。我不想每天通过我的工作阅读文件。而不是它,我想存储缓存中的文件数据(哈希映射)。因此,当第二天运行相同的作业时,它将仅使用来自缓存的数据。是否有可能在春季批次?
欢迎您提出建议。
答案 0 :(得分:3)
您可以使用spring initialize 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
}
}
将initialize bean提供给job.xml中的itemReader或itemProcessor或itemWriter;
<bean id="exampleProcessor" class="yourpackage.ExampleProcessor" scope="step">
<property name="cacheBean" ref="yourCacheBean" />
</bean>
ExampleProcessor看起来像;
public class ExampleProcessor implements ItemProcessor<String, String> {
private YourCacheBean cacheBean;
public String process(String arg0) {
return "";
}
public void setCacheBean(YourCacheBean cacheBean) {
this.cacheBean = cacheBean;
}
}
答案 1 :(得分:0)
创建作业以将文件导入数据库。其他作业将使用数据库中的数据作为缓存。
另一种方式可以是将文件读入Map&lt;&gt;并且在需要时将对象序列化为文件而不是反序列化(但我仍然喜欢将数据库作为缓存)
答案 2 :(得分:0)
Spring有一个缓存注释,可以帮助实现这种情况,并且实现起来非常简单。将执行对方法的第一次调用,之后如果使用完全相同的参数调用相同的方法,则缓存将返回该值。
这里有一个小教程:http://www.baeldung.com/spring-cache-tutorial
在您的情况下,如果您对读取文件的调用总是使用相同的参数,则可以根据需要使用。只需照顾TTL。