Spring Batch 5系へ移行したときの話
Spring Boot / Batchを、それぞれ3系、5系に移行したときに気になったことついて書きたいと思います。
主な構成
- JDK: 17.0.6
- Kotlin: 1.9.10
- Spring Boot: 3.1.2
- Spring Batch: 5.1.2
メタテーブルを置き換える
https://github.com/spring-projects/spring-batch/wiki/Spring-Batch-5.0-Migration-Guide#removed-apis こちらに記載があるように、MapJobRepositoryFactoryBean
が削除されるため、今までこちらを用いてメタテーブルを利用していた場合は、他の手段を用いる必要があります。
ここでは、H2を利用する例を示します。
以下を追加します。
runtimeOnly("com.h2database:h2")
次に、DataSource定義用ファイルに以下を記載します。ソースコードは例です。
@Primary
@Bean
fun mainDataSource(): DataSource {
return SimpleDriverDataSource().also {
it.driver = Class.forName(properties.driverClassName).getDeclaredConstructor().newInstance() as? Driver
it.url = properties.main.url
it.username = properties.main.username
it.password = properties.main.password
}
}
@BatchDataSource
@Bean
fun metaDataSource(): DataSource {
return EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript("classpath:org/springframework/batch/core/schema-drop-h2.sql")
.addScript("classpath:org/springframework/batch/core/schema-h2.sql")
.build()
}
@EnableBatchProcessing is now discouraged
Previously, @EnableBatchProcessing could be used to enable Spring Boot’s auto-configuration of Spring Batch. It is no longer required and should be removed from applications that want to use Boot’s auto-configuration. A bean that is annotated with @EnableBatchProcessing or that extends Batch’s DefaultBatchConfiguration can now be defined to tell the auto-configuration to back off, allowing the application to take complete control of how Batch is configured.
こちらにあるように、特にカスタマイズせず、Spring Batchの自動設定を利用するには@EnableBatchProcessing
は不要です。
メタデータ管理用のデータソースがDataSource Beanとなっていて、メインDBのデータソースが使われない場合は@EnableBatchProcessing
を削除してみると良さそうです。
https://github.com/spring-projects/spring-batch/issues/3942
Jobの指定方法を変更する
Multiple Batch Jobs
Running multiple batch jobs is no longer supported. If the auto-configuration detects a single job is, it will be executed on startup. If multiple jobs are found in the context, a job name to execute on startup must be supplied by the user using the spring.batch.job.name property.
以下に例を示します。
- $ java -jar hoge.jar --spring.batch.job.names=SampleJob --spring.batch.job.enabled=true
+ $ java -jar hoge.jar --spring.batch.job.name=SampleJob --spring.batch.job.enabled=true
最後に
他にも変更点が色々あるので、詳細はMigration Guideを参照ください。
Discussion