2016-01-29 143 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 ... //