📝 BLOG.IK.AM

@making's memo
(🗃 Categories 🏷 Tags)

Spring Batch + Spring Bootで複数DataSourceを扱うときの設定

🗃 {Programming/Java/org/springframework/batch}

🏷 Java 🏷 Spring 🏷 Spring Batch 🏷 Spring Boot

🗓 Updated at 2017-03-01T06:13:37+09:00 by Toshiaki Maki  🗓 Created at 2017-03-01T06:13:37+09:00 by Toshiaki Maki  {✒️️ Edit  ⏰ History}


🚨 Warning: This content is old. Please don't trust too much.

聞かれたのでメモ。

Spring BatchはデフォルトでJob管理のためのメタデータテーブルをDBに作成する。
Spring Bootを使うと設定不要でそのテーブルが作成され、アクセスするためのJobRepositoryなどが作られる。

ただ、これがDataSourceが一個しか登録されていないことを前提にしているので、本ジョブで複数のDataSourceを使おうとするとエラーになる。

java.lang.IllegalStateException: To use the default BatchConfigurer the context must contain no more thanone DataSource, found 2

この時はJobRepository用のDataSource@Primaryをつけて、次のようなBatchConfigurerを用意しておけば良い。

@Bean
@ConfigurationProperties(prefix = "spring.datasource1")
@Primary
DataSource dataSource() {
    return DataSourceBuilder.create().build();
}

@Bean
@ConfigurationProperties(prefix = "spring.datasource2")
DataSource dataSource2() {
    return DataSourceBuilder.create().build();
}

@Bean
DefaultBatchConfigurer batchConfigurer(DataSource dataSource) {
    return new DefaultBatchConfigurer(dataSource);
}

メタデータテーブルをそもそも作りたくないという場合は次の記事を参照。