【SpringBatch】メタテーブルをH2で管理

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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です