36720


spring-boot でバックエンドのサービスを開発しています。

以下の性質を持つバッチ群を作成したいと考えているのですが、spring 的に、どのような構成でバッチを作成するのが正しいのか、わからずにいます。

  * 各バッチは、 DataManager Bean (インスタンス) を共通して使いたい.  
(排他制御は DataManager が行う)

  * 各バッチは、それぞれ非同期実行してもかまわない
  * 各バッチは、それぞれに定められた周期で定期的に実行される。

自分でパッと考えつくのは、

  * 各バッチごとに、 XxxBatchManager を Bean で作成
  * 各 BatchManager は、バッチジョブを実行し、それが終わったら sleep(規定時間) を行う。これを繰り返す。

なのですが、もうちょっとうまい方法があるのではないか、と思い質問しています。


CC BY-SA 3.0
2017-07-27T07:29:43.767
36717
2017-07-27T08:54:21.530
754
question
java spring-boot
spring-boot にて、定時実行バッチを記述したい


<https://docs.spring.io/spring/docs/current/spring-framework-
reference/html/scheduling.html>

に、一通り可能なオプションが記述されていました。今回のケースでは、 `@Scheduled` オプションが、最もほしいものに近いです。指定されたメソッドを、
spring boot が用意してくれる Executor で、指定頻度で実行してくれます。

XxxBatch.java

[code]

    @Component
    public class XxxxBatch {
    
        @Autowired
        private DataManager dataManager;
    
        @Scheduled(fixedRate = rateInMilliSeconds)
        public void doBatchJob() {
            // 略
        }
    }
    
[/code]

AppConfig.java

[code]

    @Configuration
    @ComponentScan
    // Configuration に下記アノテーションを付与することで、
    // @Scheduled が使えるようになる。
    @EnableScheduling
    public AppConfig {
        // もろもろの config
    }
    
[/code]


CC BY-SA 3.0
2017-07-27T08:54:21.530
36720
2017-07-27T08:54:21.530
754
36717
answer