春季批次

时间:2016-01-29 15:01:51

标签: java spring spring-batch

我有以下工作要按特定时间间隔或临时处理。

工作的步骤是:

  1. 调用twitter api并为一堆用户收集推文并编写     在文件中

  2. 从文件中读取它们并处理它们

  3. 转储已处理     结果数据库
  4. 我也想要UI,我可以在临时基础上触发工作,而且我应该能够从UI提供参数。

    正在考虑Spring批次,但这是为了更多的阅读 - >过程 - >写一份工作。在第一步中,我生成的数据由第二步读取。不确定我是否仍然可以使用Spring批处理OR,可能有更好的方法。

2 个答案:

答案 0 :(得分:1)

使用弹簧批,您可以将作业设计为步骤,每一步都有自己的读者,处理器,作家。

<job id="yourJobID" >
    <step id="gatherTweet" next="processTweet">
        <tasklet>
            <chunk reader="tweetCollector" writer="tweetFileWriter"/>
        </tasklet>
    </step>
    <step id="processTweet">
        <tasklet>
            <chunk reader="tweetFileWriterReader" processor="tweetProcessor" writer="tweetDataBaseWriter"/>
        </tasklet>
    </step> 
</job>

要启动作业的UI,您可以使用spring batch admin。

答案 1 :(得分:0)

或者,您可以使用Java而不是使用XML来配置作业和步骤。

例如,myJob bean在下面定义并使用step0,step1和step2(步骤也只是bean):

// Job Definition //
@Bean
public Job myJob(JobBuilderFactory jobs)
{
    return jobs.get("My Twitter Job")
            .incrementer(new RunIdIncrementer())               
            .from(step0()).next(step1()).next(step2())
            .end()
            .build();
}

...

// Custom ItemReader that is Autowired in //    
@Autowired
protected ItemReader<TweetDto> gatherTweetItemReader;

...

@Bean
public Step step0()
{
    return steps.get("Step0 - gatherTweet")
            .tasklet(gatherTweetItemReader)
            .allowStartIfComplete(true) // Always run this step //
            .build();
}

// ... Step1 and Step2 definitions ... //