开发者

Passing parameters from one job to another in Spring batch framework

How do i pass values which are fetched fr开发者_JAVA技巧om database in one job as parameters to another job in Spring framework?PLese provide a example code.


I'm guessing by jobs you mean scheduled-tasks. I was in the same situation where 2 jobs were dependent on one another eg:

<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>

What I did was to set a DELETE flag on the ACCOUNTS table to true and have the emailDeletedAccountsConfirmationJob read only the ACCOUNTS with DELETE = true


Another solution, if you want to share data between ItemReaders would be to be to have a Java Spring configuration class "@Configuration" and declare your ItemReaders in this class with @Bean annotation and also have a private synchronized Map or List which will be shared between all the threads/jobs or your spring batch steps and you access the synchronized list in your readers.

@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
    }


in Spring Batch Jobs are considered distinct use cases with no conceptual relationship imposed by the framework. you could see a job as a standalone processing application.

a typical batch system consists of data sources and data sinks such as a message queue, database or file system, so one job is producing data, that is intended to be process by another part of your application.

you may rework your design to use tasks instead of jobs. this is useful if you have several interdependent process steps. there is a way to access the JobExcecution from StepExecution.

I recommend reading the excellent articles as well as "Spring Batch in Action".

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜