バッチとして使用スプリングバッチフレームワークは、従来のオフライン計算を完了するためのデータの量が特に大きくありません。
今、初心者の簡単な例を記述します。
デフォルトでは、ここでは、春のバッチの基本をマスターしている練習の例はちょうどすぐに始めるために
目標1:プログラム、ランダムに生成された文字列は、春のバッチの後に、「---- PROCESSED」の文字列を追加した後に統一し、出力
目標2:TXTファイルの読み取りプログラムは、春のバッチの後に、統一されたフィールド、および出力として追加されました
春のバッチ処理
- データを読む---- itemReader
- データ処理---- itemProcess
- データが書き込まれている---- itemWrite
分析は、標的を発見標的つの異なる入力データ・ソース、実質的に一貫した処理、ライトルールの完了後のデータと一致
これにより完了コード・セグメント
itemReader
ターゲット
ここで使用されていない春のバッチは、集中読者、読者がそのようにカスタムランダムに生成された文字列が来ます
ここでは、コードリーダー無線ループがランダムな文字列を生成しますが、完全ではありませんが、本研究の目的には影響を与えません。
public class MyItemReader implements ItemReader<String> {
@Override
public String read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
return RandomStringUtils.randomAlphabetic(10);
}
}
客観つ
それはそうカスタムリーダーを理解していない、ファイルの内容を読み取ることがあるので、直接FlatFileItemReader使用するに設定バッチで構成することができます
@Bean
public ItemReader<String> textReader(){
FlatFileItemReader<String> reader=new FlatFileItemReader<>();
File file = new File("D:\\FTP\\ttest.txt");
reader.setResource(new FileSystemResource(file));
reader.setLineMapper(new LineMapper<String>() {
@Override
public String mapLine(String line, int lineNumber) throws Exception {
return line;
}
});
return reader;
}
itemProcess
ここでは、同じアプローチを使用することができます
public class MyItemProcessor implements ItemProcessor<String,String> {
@Override
public String process(String s) throws Exception {
return s+"---------PROCESSED";
}
}
itemWriter
また、同じを使用することができます
public class MyItemWriter implements ItemWriter<String> {
@Override
public void write(List<? extends String> items) throws Exception {
for (String item : items) {
System.out.println(item);
}
}
}
バッチコンフィグ設定
@Configuration
@EnableBatchProcessing
public class BatchConfiguration extends DefaultBatchConfigurer {
@Autowired
public StepBuilderFactory stepBuilderFactory;
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Bean
public MyItemProcessor processor(){
return new MyItemProcessor();
}
@Bean
public ItemWriter<String> writer(){
return new MyItemWriter();
}
@Bean
public ItemReader<String> textReader(){
FlatFileItemReader<String> reader=new FlatFileItemReader<>();
File file = new File("D:\\FTP\\ttest.txt");
reader.setResource(new FileSystemResource(file));
reader.setLineMapper(new LineMapper<String>() {
@Override
public String mapLine(String line, int lineNumber) throws Exception {
return line;
}
});
return reader;
}
@Bean
public ItemReader<String> stringReader(){
return new MyItemReader();
}
@Override
public void setDataSource(DataSource dataSource) {
super.setDataSource(dataSource);
}
@Bean
public Step myStep(){
return stepBuilderFactory
.get("step1")
//这个chunk size是最后调用写入的时候,一次性写入多少条已处理的数据
.<String,String>chunk(10)
// .reader(textReader())
.reader(stringReader())
.processor(processor())
.writer(writer())
.build();
}
@Bean
public Job MyJob(){
return jobBuilderFactory
.get("MyJOB")
.listener(new JobExecutionListenerSupport(){
//所有处理结束后调用
@Override
public void afterJob(JobExecution jobExecution) {
if(jobExecution.getStatus() == BatchStatus.COMPLETED){
System.out.println("OK");
}
}
})
.flow(myStep())
.end()
.build();
}
}
終了
昨年春のブートプログラムを直接実行することができます