Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

【SpringBatch】メタテーブルを利用したくないとき

概要

  • spring-batchではデフォルトでメタテーブルを使用し、ジョブの管理をしてくれる
  • が、そのメタテーブルを利用したくない時の設定方法をまとめた

実装方法

BasicBatchConfigurerを継承したクラスをBean登録してあげるだけ!

NoMetaTableConfigurer.java
@Component
public class NoMetaTableConfigurer extends BasicBatchConfigurer {
    private final JobRepository jobRepository;
    private final JobExplorer jobExplorer;

    /**
     * constructor
     */
    public NoMetaTableConfigurer(
            BatchProperties properties,
            DataSource dataSource,
            TransactionManagerCustomizers transactionManagerCustomizers) {
        super(properties, dataSource, transactionManagerCustomizers);

        MapJobRepositoryFactoryBean repoFactory = new MapJobRepositoryFactoryBean(new ResourcelessTransactionManager());
        repoFactory.afterPropertiesSet();
        this.jobRepository = repoFactory.getObject();

        MapJobExplorerFactoryBean explFactory = new MapJobExplorerFactoryBean(repoFactory);
        explFactory.afterPropertiesSet();
        this.jobExplorer = explFactory.getObject();
    }

    /**
     * メタテーブルを使用しないようにするためにcreateJobRepositoryを独自に定義.
     */
    @Override
    protected JobRepository createJobRepository() {
        return this.jobRepository;
    }

    /**
     * メタテーブルを使用しないようにするためにcreateJobExplorerを独自に定義.
     */
    @Override
    public JobExplorer createJobExplorer() {
        return this.jobExplorer;
    }
}

ResourcelessTransactionManagerMapJobRepositoryFactoryBean,MapJobExplorerFactoryBeanを使えばOK!

少し補足すると、
SpringBatchはBatchConfigurerの実装クラスによって動作を変えられるのですが、
デフォルトではBasicBatchConfigurerを使用しているようでした。

そのため、BasicBatchConfigurerを継承し、メタテーブルを利用しなくする設定だけしてみました

自問自答QA

Q. どうしてメタテーブルを利用したくないの?

A. 利用したくないというよりも、利用できない…

DBの権限でアプリケーションユーザーではテーブル作成をできなくしているのと、
spring-batchのバージョンアップ等でテーブルの変更があったときについていくのが大変

Q. じゃあspring-batchじゃなくてもよくない?

A. pushgatewayにメトリクス送信してくれる機能は使いたいのです😇

参考: Pushgatewayを使ってSpringBatchのメトリクス収集

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away