春季批次如何共享工作之间的数据



我在春季批处理作业上有一个查询。我想在同一执行上下文中与另一个作业共享一个工作的数据。是否可以?如果是这样,那么如何?

我的要求是缓存。我有文件,其中存储了一些数据。我的工作每天运行,需要该文件的数据。我不想每天通过工作来阅读文件。我想将文件数据存储在缓存(哈希地图)中。因此,当第二天同一作业运行时,它将仅使用来自缓存的数据。是否可以在春季批处理?

欢迎您的建议。

您可以使用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。

最新更新