Spring Batch にアプリケーションとは別のデータベーススキーマを使わせたい

yujiorama/spring-batch-different-database-schema-example

経緯

  • Spring Batchでジョブを実行するには、ジョブ実行管理テーブル群を作らないといけない
  • アプリケーションのデータベーススキーマはFlywayでマイグレーションするので、分けておきたい
  • テーブル群を作るSQLスクリプトは、jarに内包されているスクリプトを使いたい
  • Spring Batchを構成する BatchConfigurer には、データソースを設定するインターフェイスしかない
    • データソースの初期データベーススキーマが、テーブル群を作成するデータベーススキーマになる

目標の設定

(HikariCP決め打ちになっちゃうけど)データベーススキーマを指定したデータソースとして自動構成させる。

問題になるかどうかの考察。

  • アプリケーションがクエリを実行するとき、明示的にデータベーススキーマを指定する場合
  • アプリケーションがクエリを実行するとき、明示的にデータベーススキーマを指定しない場合
    • JdbcTemplate とか
    • JDBC Connectionオブジェクトを取得できればどうにかなるので、そういうラッパークラスを用意すればよい

調査と検討

Spring Bootの自動構成プロパティをこうすればよかった。

spring.datasource:
  name: demo
  driver-class-name: org.postgresql.Driver
  url: jdbc:postgresql://localhost:5432/postgres
  username: app
  password: app
  schema:
    - classpath:db/schema/batchdemo.sql
  schema-username: app
  schema-password: app
  initialization-mode: always
  hikari:
    schema: batchdemo