Spring入門ガイド実施　第2回　@Scheduled アノテーションで定期実行

日本語版のガイドがあったのでこっちを見ていく。

https://spring.pleiades.io/guides/gs/scheduling-tasks

# 作るもの
>Spring の @Scheduled アノテーションを使用して、5 秒ごとに現在時刻を出力するアプリケーションを作成します。

必要なもの
・約15分
　→準備している前提。
・任意のテキスト エディターまたは IDE
　→eclipse Version: 2022-12 (4.26.0)を使用します。
・Java 1.8 以降
　→17を使います。
・Gradle 7.5 以降または Maven 3.5 以降
　→Gradle 8.7 を使用します。

# プロジェクトを作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626978/850089e0-a47b-d52d-7543-09949cb6898b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626978/eb909227-5e2d-93c5-ce8e-accde66509b4.png)


# 手順を実施していく
知らない箇所が出たら何となくわかるまで調べる方針で進める。

### Gradleの記述で間違えているのではないかと思うところがあったので掲載。
(いけるかもしれないけど試していない)
>awaitility ライブラリのそれ以降のバージョンはこのテストでは機能しないため、バージョン 3.1.2 を指定する必要があります。

上記の記載があるのに4.2.0使っているし、testImplementationにカッコが付いているがGroovyではなくKotlinの記述っぽい。バージョン違いは怪しいけどGroovyとKotorlinは混在させられるのかもしれない。
```groovy
dependencies {
	implementation 'org.springframework.boot:spring-boot-starter'
	testImplementation 'org.awaitility:awaitility:4.2.0'
	testImplementation('org.springframework.boot:spring-boot-starter-test')
}
```

###  Java Library plugin(build.gradleのdependenciesのところ)
今日はあんまりちゃんと見てないけどdependenciesに設定しているimplementationとtestImplementationの理解が怪しいので次回以降で確認する。

https://docs.gradle.org/current/userguide/java_library_plugin.html

### getLoggerの引数にクラス名を渡す訳
LoggerFactory.getLogger(クラス)で何でわざわざクラス名を指定しているのかわからなかったがlogback.xmlという設定ファイルをしっかり記述していた場合は意味があるっぽい。設定していない場合はデフォルトのLoggerが返されるのでコンソールにデフォルトのフォーマットですべてのログレベルのログが出力される。
これは`Logback`というライブラリらしいので検索ワードの参考までに。

https://qiita.com/opengl-8080/items/49719f2d35171f017aa9

### build.gradleのmanifest設定
build.gradleへ忘れずに追加する。

```groovy
jar {
    manifest {
        attributes 'Main-Class': "com.example.schedulingtasks.SpringBootGuide02Application"
    }
}
```
この設定がビルド後の`build\tmp\bootJar\MANIFEST.MF`に影響する。設定していなかった場合はjar実行時にメインクラスねえからと怒られるみたい。

https://qiita.com/shinyay/items/1a000cd082bf2d670531


# ビルド
まだビルド方法覚えきれていないから以下を参照。

https://learning-collection.com/eclipse%E3%81%A7jar%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/

# 実行
```
>java -jar "D:\Spring学習\workspace-sub\SpringBootGuide02\build\libs\SpringBootGuide02-0.0.1.jar"

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.2.4)

2024-04-05T00:46:52.117+09:00  INFO 15340 --- [SpringBootGuide02] [           main] c.e.s.SpringBootGuide02Application       : Starting SpringBootGuide02Application v0.0.1 using Java 17.0.10 with PID 15340 (D:\Spring学習\workspace-sub\SpringBootGuide02\build\libs\SpringBootGuide02-0.0.1.jar started by socce in C:\Users\socce)
2024-04-05T00:46:52.120+09:00  INFO 15340 --- [SpringBootGuide02] [           main] c.e.s.SpringBootGuide02Application       : No active profile set, falling back to 1 default profile: "default"
2024-04-05T00:46:53.194+09:00  INFO 15340 --- [SpringBootGuide02] [   scheduling-1] c.e.schedulingtasks.ScheduledTasks       : 現在時刻は00:46:53
2024-04-05T00:46:53.361+09:00  INFO 15340 --- [SpringBootGuide02] [           main] c.e.s.SpringBootGuide02Application       : Started SpringBootGuide02Application in 1.822 seconds (process running for 3.811)
2024-04-05T00:46:58.177+09:00  INFO 15340 --- [SpringBootGuide02] [   scheduling-1] c.e.schedulingtasks.ScheduledTasks       : 現在時刻は00:46:58
2024-04-05T00:47:03.181+09:00  INFO 15340 --- [SpringBootGuide02] [   scheduling-1] c.e.schedulingtasks.ScheduledTasks       : 現在時刻は00:47:03
2024-04-05T00:47:08.184+09:00  INFO 15340 --- [SpringBootGuide02] [   scheduling-1] c.e.schedulingtasks.ScheduledTasks       : 現在時刻は00:47:08
2024-04-05T00:47:13.176+09:00  INFO 15340 --- [SpringBootGuide02] [   scheduling-1] c.e.schedulingtasks.ScheduledTasks       : 現在時刻は00:47:13
2024-04-05T00:47:18.177+09:00  INFO 15340 --- [SpringBootGuide02] [   scheduling-1] c.e.schedulingtasks.ScheduledTasks       : 現在時刻は00:47:18
2024-04-05T00:47:23.177+09:00  INFO 15340 --- [SpringBootGuide02] [   scheduling-1] c.e.schedulingtasks.ScheduledTasks       : 現在時刻は00:47:23
```

感想
かなりよく使いそうなLogBackについて知るいい機会だった。
`@Scheduled`は日時処理とかに使えそう。
知らないこと多すぎて15分じゃ終わらない。