このページを解読していきます。
環境
sts 3.8.4
stsを立ち上げて「File」->「New」->「Import Spring Getting started content」から対象のプロジェクトを検索。インポートして動作を確認している。
経緯
Spring bootを学習していたが、市販の書籍が頼りなく本家のドキュメントを読むことに。
全て英語なので四苦八苦しながら読んでいる。
Java スキル
Oracle Java8 Silver程度
学習のための備忘録として書いています。
修正すべき点や補足などアドバイスがありましたらぜひともお願いいたします。
##コンポーネントの作成
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のコードを見ていきます。
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ではプロジェクト名をクリックして再生ボタンを押せば自動的にコンパイルから実行まで行われます。
コンソールに5秒ごとにログが追加されていきます。