spring-batchではメタテーブルを使用し、ジョブの管理をしてくれます。
が、そのメタテーブルをアプリケーションのDBとは別で管理したい場合の設定方法をまとめます。
この記事では、メタテーブルの保存先をH2とします。
動作環境
検証時のbuild.gradleです。
plugins {
id 'java'
id 'org.springframework.boot' version '3.0.5'
id 'io.spring.dependency-management' version '1.1.0'
}
group = 'hirabay'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-batch'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.batch:spring-batch-test'
}
tasks.named('test') {
useJUnitPlatform()
}
実装
まずはメタテーブルの操作に利用するDataSourceとTransactionManagerをBean登録します。
@Configuration
public class MetadataConfiguration {
@Bean
public DataSource metaDataSource() {
EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
return builder.setType(EmbeddedDatabaseType.H2)
.addScript("classpath:org/springframework/batch/core/schema-drop-h2.sql")
.addScript("classpath:org/springframework/batch/core/schema-h2.sql")
.build();
}
@Bean
public PlatformTransactionManager transactionManager() {
return new ResourcelessTransactionManager();
}
}
次に@EnableBatchProcessing
に先ほど登録したBean名を登録します。
@EnableBatchProcessing(dataSourceRef = "metaDataSource")
これでOK!
補足
まだ検証し足りていない気がするのですが、SpringBoot3への移行で困った人の手掛かりになればと残しておきます。
参考
https://www.baeldung.com/introduction-to-spring-batch