2016-01-29 141 views
0

我有以下工作要在特定时间间隔或临时处理。春季批次的批量作业

步骤的工作是:

  1. 调用Twitter的API和收集鸣叫一堆用户,他们在文件中写

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

  3. 转储加工 结果数据库

我也想要UI,我可以在特定的基础上触发一个工作,而且我应该能够从UI为它提供参数。

想到Spring批处理,但它更多的是读 - >处理 - >写种类的工作。这里第一步是生成第二步读取的数据。不知道我是否仍然可以使用Spring批处理或者有更好的方法。

回答

1

使用spring批处理,你可以设计你的工作的步骤,每一步都有它自己的读者,处理器,作家。

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

+0

所以读者=“tweetCollector”不读什么这样。我相信,我将不得不将这个作为一个自定义阅读器来写,它实际上会调用Twitter API并收集推文。我可以在Spring批处理中使用这种自定义书写阅读器吗? – Kaunteya

+0

是的,您可以编写实现ItemReader的自定义阅读器。 – hasnae

+0

也许这个例子可以帮助你:http://smarttechie.org/2015/04/04/get-twitter-trends-using-spring-batch/ – hasnae

0

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

例如myJob bean被定义如下,采用step0,第一步和第二步(步骤只是豆太):

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