2015-10-22 18 views

答えて

5

ItemReaderの方法setResourceは、org.springframework.core.io.Resourceをパラメータとする。このクラスにはすぐに使用できる実装がいくつかありますが、その中でorg.springframework.core.io.InputStreamResourceがあります。このクラスのコンストラクタは、java.io.ByteArrayInputStreamで実装できるjava.io.InputStreamを受け取ります。

技術的には、はい、ItemReaderbyte[]パラメータを消費することができます。

1)独自のFlatFileItemReaderを作成します(CSVがフラットファイルであるため)、それはStepExecutionListener

public class CustomFlatFileItemReader<T> extends FlatFileItemReader<T> implements StepExecutionListener { 
} 

2を実装します:実際には、ここではいくつかのアイデアであることを行う方法について今

、 )をオーバーライド)内のあなたのWebサービス呼び出しを行い、beforeStepメソッドをオーバーライドし、変数

private byte[] stream; 

@Override 
public void beforeStep(StepExecution stepExecution) { 

    // your webservice logic 
    stream = yourWebservice.results(); 

} 

3に結果を保存しますメソッドを使用して、streamを実際のリソースとして渡します。

@Override 
public void setResource(Resource resource) { 

    // Convert byte array to input stream 
    InputStream is = new ByteArrayInputStream(stream); 

    // Create springbatch input stream resource 
    InputStreamResource res = new InputStreamResource(is); 

    // Set resource 
    super.setResource(res); 
} 

あなたがItemReader以内にあなたのWebサービスを呼び出すためにしたくない場合にも、あなたは、単にJobExecutionContextのバイト配列を格納し、stepExecution.getJobExecution().getExecutionContext().get("key");

+0

優れた答えをbeforeStep方法でそれを得ることができる、とポイント。ありがとう@Thrax – explorer

+0

ジョブランチャーを使ってジョブを起動しているときにストリームを渡す方法はありますか?それはjobParametersを渡すのと同様ですか?私はファイルを取得するための別のサービスを持っているし、私はそれを読み込むバッチジョブを開始したい。 – explorer

+0

@explorer残念ながら、 'JobParameters'は' String'、 'Long'、' Date'、 'Double'型しか渡すことができません。この記事によれば、http://forum.spring.io/forum/spring-projects/batch/96660-how-to-pass-complex-objects-to-job-launcherによると、外部ストレージを使用するか(saveあなたのファイル)にアクセスすることができるBeanを宣言するか、Beanを宣言します。 – Thrax

関連する問題