LoginSignup
1
1

More than 5 years have passed since last update.

Springの「GUIDES」を解読する旅 Scheduling Tasks編 つっこみ大歓迎!

Last updated at Posted at 2018-02-25

Scheduling Tasks

このページを解読していきます。

環境
sts 3.8.4
stsを立ち上げて「File」->「New」->「Import Spring Getting started content」から対象のプロジェクトを検索。インポートして動作を確認している。

経緯
Spring bootを学習していたが、市販の書籍が頼りなく本家のドキュメントを読むことに。
全て英語なので四苦八苦しながら読んでいる。

Java スキル
Oracle Java8 Silver程度

学習のための備忘録として書いています。
修正すべき点や補足などアドバイスがありましたらぜひともお願いいたします。

コンポーネントの作成

ScheduledTasks.java
package hello;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class ScheduledTasks {

    private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.class);

    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

    @Scheduled(fixedRate = 5000)
    public void reportCurrentTime() {
        log.info("The time is now {}", dateFormat.format(new Date()));
    }
}

まずはこちらのコードから。
@Componentとすることで次に作成するApplication.javaのMainクラスで使用することができるようになります。Mainクラスには@SpringBootApplication@ComponentScanを含む)というアノテーションをつける必要があります。これにより同じパッケージ内のコンポーネントを自動的に探せるようになります。ここで作成するコンポーネントも使用できるようになります。

ScheduledTasksメソッドを読み解く

このクラスでは5秒ごとにコンソールにログを表示する仕組みを作っています。
private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.class);
でロガーを取得します。

LoggerFactoryとはLog4j の開発者が作ったロギングライブラリです。
ScheduledTasks.classのようにロガーを使うクラスのClassオブジェクトというものを引数に設定します。

これにより、デフォルトではlog.info( )でコンソールに表示できるようになります。

@Scheduled(fixedRate = 5000)というアノテーションをつけておけば定期的にそのメソッドが実行されることになります。ちなみに引数のあるメソッドにアノテーションをつけて場合例外が発生します。次に作るファイルで@EnableSchedulingの指定をすることにより@Scheduledがついたメソッドが実行されます。

SimpleDateFormatやDateに関しては割愛します。

Application.javaの作成

次にmainメソッドを持つ、application.javaのコードを見ていきます。

Application.java
package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling
public class Application {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class);
    }
}

アノテーションの解説

このコードでは@SpringBootApplicationのアノテーションがついています。こちらは@Configuration @EnableAutoConfiguration @EnableWebMvc @ComponentScanをセットで読み込みます。

@ComponentScanにより先ほど作成したScheduledTasksクラスを探してくれます。@EnableSchedulingをつけると@Scheduled(fixedRate = 5000)のアノテーションをつけたreportCurrentTime()メソッドが定期的に実行されるようになります。アノテーションは@Scheduled(cron="")を使うことでさらに複雑なスケジューリングも可能になるようです。

実行

stsではプロジェクト名をクリックして再生ボタンを押せば自動的にコンパイルから実行まで行われます。

screen.jpg

コンソールに5秒ごとにログが追加されていきます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1