如何将从一个作业中的数据库中提取的值作为参数传递给Spring框架中的另一个作业?PLese提供了示例代码。
答案 0 :(得分:1)
我猜工作你的意思是预定任务。我处于相同的情况,其中2个工作依赖于彼此,例如:
<task:scheduled-tasks>
<task:scheduled ref="deleteExpiredAccountsJob" method="launch" fixed-delay="100000" />
</task:scheduled-tasks>
<task:scheduled-tasks>
<task:scheduled ref="emailDeletedAccountsConfirmationJob" method="launch" fixed-delay="100000" />
</task:scheduled-tasks>
我所做的是将ACCOUNTS表上的DELETE标志设置为true,并使emailDeletedAccountsConfirmationJob只读取带有DELETE = true的ACCOUNTS
另一个解决方案,如果你想在ItemReaders之间共享数据,那就是拥有一个Java Spring配置类“@Configuration”,并使用@Bean注释在这个类中声明你的ItemReaders,并且还有一个私有的同步Map或List。将在所有线程/作业或您的弹簧批处理步骤之间共享,并且您可以访问读者中的同步列表。
@Configuration
public class MySpringConfig {
private List<String> list = Collections.synchronizedList(new ArrayList<String>());
@Bean
@Scope("step")
public JdbcCursorItemReader readerOne(){
//add data to list
}
@Bean
@Scope("step")
public JdbcCursorItemReader readerTwo(){
//check for certain data in the list, if exists ... do something
}
答案 1 :(得分:0)
作业被认为是不同的用例,没有框架强加的概念关系。您可以将作业视为独立的处理应用程序。
典型的批处理系统由数据源和数据接收器组成,例如消息队列,数据库或文件系统,因此一个作业正在生成数据,这些数据旨在由应用程序的另一部分处理。
您可能会重新设计您的设计以使用任务而不是工作。如果您有几个相互依赖的流程步骤,这将非常有用。 是从StepExecution访问JobExcecution的方法。
我建议阅读优秀的文章以及“Spring Batch in Action”。