我理解JobRepository用于作业状态的CRUD操作。我是否正在使用持久性数据库,JobRepository是否会将历史元数据保存在数据库中,还是仅存储当前正在运行的进程?
另外,如果我由作业调度程序执行了一系列作业,并且每个作业都有自己的JobRepository数据库,那么它们是否会共享相同的持久表,或者我为每个JobRepository创建不同的数据库?
答案 0 :(得分:1)
作业存储库需要运行spring批处理,但这需要一些工作来实际提供任何值(例如设置spring batch admin或编写自己的ui)。在大多数我看过使用Spring Batch的项目中,作业存储库纯粹是一种只能写入的东西,往往被完全忽略。你需要拥有它,没有人会看到它。使用sql客户端在表中挖掘以查找包含错误,警告和堆栈跟踪的日志,如果正确设置日志记录并正确执行日志记录对于任何严肃的服务器端业务都是一项硬性要求。
恕我直言,因为它增加了很多复杂性,所以将作业存储库作为可选项将是一件好事。大多数项目根本不需要它。并且大多数需要它的项目(例如,多节点批处理集群)可能应该查看实际上旨在提供跨集群状态管理的其他技术(例如,Zookeeper)。此外,在这一点上,你可能更喜欢看Spring Cloud,hadoop或类似的解决方案。春季批次是这类解决方案的垫脚石。要注意的一些事情:
.incrementer(new RunIdIncrementer())
。 答案 1 :(得分:0)
Spring Batch JobRepository存储每个批处理作业的详细信息,而不仅仅是当前作业。 只要作业在spring上下文中共享相同的jobRepository配置,它就会将作业详细信息保存到为jobRepository配置的同一数据库,这与执行作业的方式无关紧要。
<bean id="jobRepository"
class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean">
<property name="dataSource" ref="dataSourceName" />
</bean>