当我使用“分裂流”并行运行spring批处理作业时,我发现spring批处理管理和命令行之间存在差异。
我有一个工作流如下:
Job1 -> Job2 -> Job3
-> Job4
<import resource="classpath*:META-INF/spring/batch/dependencies/parallel2.xml"/>
<import resource="classpath*:META-INF/spring/batch/dependencies/parallel3.xml"/>
<bean id="taskExecutor" class="org.springframework.core.task.SimpleAsyncTaskExecutor"/>
<bean id="simpleJobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />
<property name="taskExecutor" ref="taskExecutor" />
</bean>
<bean id="job1.stp01" class="com.jobs.Job1Step1" />
<batch:job id="Job1" restartable="true" >
<batch:step id="step1" next="split">
<batch:tasklet ref="job1.stp01" />
</batch:step>
<batch:split id="split" next="step3">
<batch:flow>
<batch:step id="flow1" >
<batch:job ref="Job2" job-launcher="simpleJobLauncher"/>
</batch:step>
</batch:flow>
<batch:flow>
<batch:step id="flow2">
<batch:job ref="Job3" job-launcher="simpleJobLauncher"/>
</batch:step>
</batch:flow>
</batch:split>
</batch:job>
app-context.xml
<batch:job-repository id="jobRepository" />
<task:executor id="jobLauncherTaskExecutor" pool-size="10" rejection-policy="ABORT"/>
<bean id="jobRegistry" class="org.springframework.batch.core.configuration.support.MapJobRegistry" />
<bean class="org.springframework.batch.core.configuration.support.JobRegistryBeanPostProcessor">
<property name="jobRegistry" ref="jobRegistry"/>
</bean>
但是在命令行中,与spring batch Admin有一些不同。
app-context.xml和命令行的作业配置如下:
job1.xml
<import resource="app-context.xml" />
<import resource="parallel2.xml"/>
<import resource="parallel3.xml"/>
<bean id="job1.stp01" class="com.jobs.Job1Step1" />
<batch:job id="Job1" restartable="true" >
<batch:step id="step1" next="split">
<batch:tasklet ref="job1.stp01" />
</batch:step>
<batch:split id="split" task-executor="jobLauncherTaskExecutor" next="step3">
<batch:flow>
<batch:step id="flow1" >
<batch:job ref="Job2" job-launcher="simpleJobLauncher"/>
</batch:step>
</batch:flow>
<batch:flow>
<batch:step id="flow2">
<batch:job ref="Job3" job-launcher="simpleJobLauncher"/>
</batch:step>
</batch:flow>
</batch:split>
</batch:job>
app-context.xml
<bean id="springBatchDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
.......
</bean>
<bean id="transactionManager" class="org.springframework.batch.support.transaction.ResourcelessTransactionManager" />
<bean id="jobRepository" class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean">
<property name="databaseType" value="POSTGRES" />
<property name="dataSource" ref="springBatchDataSource" />
<property name="transactionManager" ref="transactionManager" />
</bean>
<bean id="simpleJobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<property name="jobRepository" ref="jobRepository" />
</bean>
<bean id="jobLauncherTaskExecutor" class="org.springframework.core.task.SimpleAsyncTaskExecutor" />
我很抱歉,因为我的问题太久了,谢谢你的帮助。
此场景的正确行为是,在这两种情况下,在Job2和Job4完成之前,不应将Job1标记为completed
。如果在其中一个场景中没有发生这种情况,这就是一个bug,应该记录在Jira(https://Jira.spring.io)中。当Job1标记为complete
时,您确定Spring Batch Admin中的其他作业没有完成吗?
我不知道如何使用调用Spring批处理中定义的作业,文档细节对我来说是不够的。 我遵循了Spring Batch官方指南,使用Java注释(例如)在Spring Batch中编写作业,因为我希望避免使用XML配置文件来描述作业、步骤等。 到目前为止我已经: 配置类(见下文),我使用AnnotaIon将定义、、、和(带有的所有内容放入其中。 具有方法的类,该方法具有并具有注释,以导入处理作业中的数据
我有这个命令来编译我的程序。 我创建了以下makefile。 如果从terminal运行该命令将成功,但make将失败。 它将失败,并出现错误 该文件应该在命令中使用导入。 我认为Makefile中的命令执行起来很像bash脚本。 在bash中运行命令和在Makefile中运行命令有什么区别?
我使用Java Jersey框架(与Maven一起使用),并使用IntelliJ作为IDE。我遇到过这个运行时异常,它只发生在尝试从命令行运行代码时(使用maven编译,然后使用Java-JAR),但在IntelliJ中运行时不会发生,这很奇怪。 我有一些Java代码,它将尝试使HTTP访问某个远程URL,并尝试将返回的JSON读入某个Lombok POJO: 正如我之前提到的,奇怪的是,只有当我
问题内容: 我想从命令行运行Zend Framework操作来生成一些文件。这可能吗?我需要对使用ZF的现有Web项目进行多少更改? 谢谢! 问题答案: 实际上,它比您想象的要容易得多。引导程序/应用程序组件和您现有的配置可以与CLI脚本一起重用,同时避免了MVC堆栈和HTTP请求中调用的不必要的重量。这是不使用wget的优点之一。 按照您的公共index.php启动脚本: 然后,您可以像在MVC
问题内容: 作业系统:Cent-OS 我有一些作业(或脚本)要运行。每个工作需要3-5分钟。我有。我可以并行使用。请建议一些脚本或工具通过并行运行40个Jobs来处理30,000个Job。 我做了什么: 我创建了40个不同的文件夹,并通过为每个目录创建一个Shell脚本来并行执行作业。 我想知道下一次处理此类工作的更好方法。 问题答案: 正如Mark Setchell所说:GNU并行。 如果您坚持
一个spark有一个oracle查询。所以我必须并行运行多个作业,以便所有查询都将同时激发。 如何并行运行多个作业?