liatomrgho ~リアトムルゴ~

一技術者の学習メモ

ゼロからはじめるSpring Bootの環境構築(with Visual Studio Code)

目次

構築に使用する環境

1. JDKのインストール

以下の理由から、RedHatのOpenJDKをインストールします。

※以下のサイトを参考にしてインストールしました。 WindowsにOpenJDKをインストールする手順

1-1. OpenJDKをダウンロード

※ダウンロードするには、RedHatのアカウントを作成する必要があります。

1-2. インストーラの実行

RedHatのサイトからダウンロードしたインストーラを実行します。 ウィザードで表示されるメッセージに従ってインストールを進めていきます。

※Java8以降はJAVA_HOMEではなく、システム環境変数にパスを見に行くので、デフォルトのままでOK

1-3. 結果を確認

コマンドプロンプト(もしくはPowerShell)で、java -version を実行してJavaのバージョンが表示されればインストール成功です。

>java -version
openjdk version "21.0.4" 2024-07-16 LTS
OpenJDK Runtime Environment (Red_Hat-21.0.4.0+7-1) (build 21.0.4+7-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-21.0.4.0+7-1) (build 21.0.4+7-LTS, mixed mode, sharing)
>

2. Visual Studio Codeの拡張機能をインストール

拡張機能のインストールは以下のページを参考に実施しました。

※3の手順も、上記2ページを参考にしています。

2-1. Java拡張機能をインストール

Extention Pack for Java をインストール。

※VS CodeのJavaの拡張機能のAll in Oneみたいなパックです。 v0.29.0 の段階では以下の拡張機能が入っています。

2-2. Spring Boot拡張機能をインストール

Spring Boot Extention Pack をインストール。

※Spring Bootを扱う上で便利な拡張機能の入ったパックです。 v0.2.1 の段階では以下の拡張機能が入っています。

  • Spring Boot tools
  • Spring Initializr Java Support
  • Spring Boot Dashboard

3. Spring Bootのプロジェクトを作成

3-1. Javaプロジェクトを作成

Create Java Projectを押下後、以下を順番に設定していきます。

  • project type(1)
    • Spring Boot ※ここでSpring Bootを選択すると、Spring Initializr を使うことになるようです。 Spring Initializr は、ビルドツール(今回はMaven)や開発言語(今回はJava)を選択すると自動で雛形となるアプリケーションを作ってくれるものです。
  • project type(2)
    • Maven Project ※これはGradleかMavenの選択でしたが、どちらでも良いと思います。自分はMavenで作りたかったので、Mavenを選択しました。
  • Spring Bootのバージョン
    • 3.3.3 ※SNAPSHOT版ではない最新のものを指定しました。
  • 使用する言語
    • Java 他に、Kotlinなども選択肢にありましたが、今回はJavaを選択しました。
  • Group Id
    • 任意のGroupId。
  • Artifact Id
    • 任意のArtifactId。
  • packaging type
    • jar war/jarの選択ですが、いったん、jarを選択しました。
  • Javaのバージョン
    • 21 ※プロジェクト作成後も、JAVA PROJECTS > Configure Java Runtime から、画像のようにProject Settingsを開いて変更できますが、事前にインストールしたJDKのバージョンに合わせておきました。 Javaのバージョンを変更する場合は、pom.xmlの properties/java.version も合わせて変更する必要がありそうです。

  • 依存するライブラリ
    • 任意のライブラリ ※ここで指定したライブラリがpom.xmlにdependencyとして追加されます。 pom.xmlの以下の部分です。

        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
      

プロジェクトの作成に成功すると、画像のようなメッセージが表示されます。

※画像はパスを黒く塗りつぶしています。

作成されたプロジェクトを開くと、mainメソッドが作成されていました。

3-2. 実行確認

自動で作成されたmainメソッドを実行すると、以下のように動きました。

PS {projectのパス}>  d:; cd '{projectのパス}'; & '{RedHatのパス}\java-21-openjdk-21.0.4.0.7-1\bin\java.exe' '@C:\Users\USER\AppData\Local\Temp\cp_4dj0i387059w3xhvviu0zhc0s.argfile' '{mainメソッドの定義されているクラス}'

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/

 :: Spring Boot ::                (v3.3.3)

2024-09-03T21:13:18.952+09:00  INFO 16028 --- [{Artifact Id}] [           main] c.p.c.{作成したprojectのApplicationクラス}          : Starting CaringDiaryApiApplication using Java 21.0.4 with PID 16028 ({Maven Projectのクラスファイルのパス} started by USER in {projectのパス})
2024-09-03T21:13:18.959+09:00  INFO 16028 --- [{Artifact Id}] [           main] c.p.c.{作成したprojectのApplicationクラス}          : No active profile set, falling back to 1 default profile: "default"
2024-09-03T21:13:20.661+09:00  INFO 16028 --- [{Artifact Id}] [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port 8080 (http)
2024-09-03T21:13:20.684+09:00  INFO 16028 --- [{Artifact Id}] [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2024-09-03T21:13:20.685+09:00  INFO 16028 --- [{Artifact Id}] [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.28]
2024-09-03T21:13:20.802+09:00  INFO 16028 --- [{Artifact Id}] [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2024-09-03T21:13:20.804+09:00  INFO 16028 --- [{Artifact Id}] [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1780 ms
2024-09-03T21:13:21.369+09:00  INFO 16028 --- [{Artifact Id}] [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 8080 (http) with context path '/'
2024-09-03T21:13:21.384+09:00  INFO 16028 --- [{Artifact Id}] [           main] c.p.c.{作成したprojectのApplicationクラス}          : Started CaringDiaryApiApplication in 3.029 seconds (process running for 3.486)
2024-09-03T21:14:17.012+09:00  INFO 16028 --- [{Artifact Id}] [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2024-09-03T21:14:17.013+09:00  INFO 16028 --- [{Artifact Id}] [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2024-09-03T21:14:17.015+09:00  INFO 16028 --- [{Artifact Id}] [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms

※プロジェクト作成時にJDBCを選択していた場合、デフォルトのままでは、以下のエラーが発生し、起動できないので注意が必要です。

2024-09-03T21:25:34.266+09:00  WARN 6664 --- [{Artifact Id}] [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception with message: Failed to determine a suitable driver class
(中略)
***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class
Reason: Failed to determine a suitable driver class


Action:

Consider the following:
        If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
        If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
        If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).

起動させるには、DB周りの処理を書いたり、まだ設定が必要そうです。 今回はSpring Bootでものを作るための環境構築が目的なので、いったん、以下のように、pom.xmlに定義されているJDBCのdependencyをコメントアウトして、無理やり起動させました。

     <!-- <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency> -->

VS Codeのターミナルに o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms といった感じのメッセージが表示されたら、ブラウザで確認してみます。 http://localhost:8080/ をブラウザでたたくと、以下の画面が表示されました。

Whitelabel Error Page というのは、Controllerクラスがまだ作られていないため出ているようです。 ただ、Springの環境自体はここまでいけば、整ったということなので、あとは自動で作成された雛形プロジェクトを肉付けしていけば良いようです。

余談ですが・・・

依存するライブラリに、Spring Securityを入れていると、Whitelabel Error Page ではなく、ログインページが表示されるようです。 pom.xmlのdependency

     <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

http://localhost:8080/ で表示される画面