Spring Batch/基本
Spring Initializrを使うなどしてプロジェクトを準備する。
言語:Java
ビルドツール:Maven、Gradleなど。
Spring Batch:Spring Bootで利用するためのstarterライブラリ。
データベース:HyperSQL、h2など。JobRepositoryを格納するために利用する。
src/main/java/com/example/batchprocessing/BatchProcessingApplication.java
@SpringBootApplication
public class BatchProcessingApplication {
public static void main(String[] args) throws Exception {
System.exit(SpringApplication.exit(SpringApplication.run(BatchProcessingApplication.class, args)));
}
}
@SpringBootApplication は、下記を追加する便利なアノテーション。
設定クラスであることを示す。
jar依存関係に基づいて、Springアプリケーションを自動的に設定する。
例: HSQLDBがクラスパス上にあり、データベース接続Beanを手動で設定していない場合、
Spring Bootはメモリ内データベースを自動設定します。
アプリケーションコンポーネント(@Component、@Service、@Repository、@Controllerなど)を検索し、
Spring Beanとして登録する。
exitについては Spring Bootのコア機能参照。
ジョブ定義、ステップ定義などを設定するには、 @Configuration クラスを作成する必要がある。
本来はJobRepositoryやJobLauncherなどのBean定義も必要だが、
クラスに@EnableBatchProcessing
を付与すると、明示的に定義せずとも自動で設定してくれる。
src/main/java/com/exampe/batchprocessing/BatchConfiguration.java ※抜粋
@Configuration
@EnableBatchProcessing
public class BatchConfiguration {
...
}
ジョブはステップによって構築される。
src/main/java/com/exampe/batchprocessing/BatchConfiguration.java ※抜粋
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Bean
public Job importUserJob(JobCompletionNotificationListener listener, Step step1) {
return jobBuilderFactory.get("importUserJob")
.incrementer(new RunIdIncrementer())
.listener(listener)
.flow(step1)
.end()
.build();
}
jobBuilderFactory.get()メソッドの引数にJob名を指定する。
.flow()メソッドでこのJobで実行するStepを指定する。
ステップは2種類のモデルがある。
ChunkモデルはItemReader、ItemProcessor、ItemWriterによって構築される。
Taskletモデルは自由に処理を記述できる。
src/main/java/com/exampe/batchprocessing/BatchConfiguration.java ※抜粋
@Autowired
public StepBuilderFactory stepBuilderFactory;
@Bean
public Step step1(JdbcBatchItemWriter writer) {
return stepBuilderFactory.get("step1")
.<Person, Person> chunk(10)
.reader(reader())
.processor(processor())
.writer(writer)
.build();
}
stepBuilderFactory.get()メソッドの引数にStep名を指定する。
.chunkや.taskletを使って、実行する処理を記載していく。
ここではchunkのため、reader、processor、writerの引数に実行する処理を指定する。
Spring Bootは、起動時にschema-@@platform@@.sqlを自動的に実行する。
-all は、すべてのプラットフォームのデフォルト。
src/main/resources/schema-all.sql
DROP TABLE people IF EXISTS;
CREATE TABLE people (
person_id BIGINT IDENTITY NOT NULL PRIMARY KEY,
first_name VARCHAR(20),
last_name VARCHAR(20)
);