背景・目的
今まで、Sprint Bootについてあまり触ってきませんでした。どのような特徴があるのかをドキュメントを基に整理しようと思います。
まとめ
下記に特徴をまとめます
特徴 | 説明 |
---|---|
Spring Boot | Springを使ったアプリケーションを高速開発するためのもの SpringのFramworkを駆使したアプリケーションを素早く作成できる |
Spring | Springのコア部分 |
概要
Sprint Bootを基に整理します。
- Spring Bootを使用すると、製品グレードのSpringベースのアプリケーションがすぐに作成できる
- 最小限の労力で始めることができる
- ほとんどのSpring Bootアプリは、最小限のSpring構成が必要
特徴
- スタンドアロンのSpring アプリケーションを作成する
- WARファイルは、不要。Tomcat、Jetty、Undertowを直接組み込んでいる
- シンプルなビルド設定を抵抗するために、「Stater」と呼ばれる依存関係を提供
- Springご3rd Party ライブラリーを可能な限り自動で構成する
- メトリクス、ヘルスチェック、外部構成などプロダクトレベルの機能を提供する
- コード生成は一切不要で、XMLの構成も不要
Spring Bootのアプリケーション開発
下記に大別されます。
- Spring Boot CLI
- Spring Bootを使うためのCLI
- Spring Boot Suite
- Spring の専用開発ツール
- VSCode用が用意されている
- Spring Initializer
- Spring InitalizerはWebサイト
- ここで作成するアプリの設定を行うと、そのプロジェクトをダウンロードできる
Spring Bootのプロジェクトの基本構成
Mavenの場合は、下記のとおりとなります。
src // ソースファイル等が配置される
|---main
| |--- java // Javaコードを配置する
| |--- resource // アプリケーションに必要な、ファイルを配置する
| |----- static // 静的ファイルを配置する。例)CSS、HTML、JS等
| |----- template // テンプレートファイルを配置
| |----- application.properties
|---test
target // 作成されるアプリケーションファイル等が配置される
Springについて
そもそも、Springについても知識を持ち合わせていないので、整理します。
Why Spring
Why Springを基に整理します。
- Springは、Javaプログラミングを迅速に、簡単に、安全に誰でも作れる
- Springは、スピード、シンプルさ、生産性にフォーカスした世界で最も一般的なJava Framework
Spring is everywhere
- Springの柔軟なライブラリは、世界中の開発者から信頼されている
- Springは、何百万ものエンドユーザに素晴らしい体験を提供している
- Springは、Alibaba、Amazon、Google 、MS等のビッグテックからの貢献もある
Spring is flexible
- Springは、柔軟で包括的な拡張機能と3rd Partyのライブラリにより開発者は、ほとんどのアプリケーションを開発できる
- Spring FrameworkのコアとなるInversion of Control (IoC) and Dependency Injection (DI)の機能は、幅広い範囲の機能と関数を提供する
- セキュア、リアクティブ、クラウドベースのWebのマイクロサービス、企業向けの複雑なストリーミングであれ、Springは役立つツールを保持している
Spring is productive
- Spring BootはJavaプログラミングのタスクへのアプローチを変えて、体験を革新的に変える
- Spring BootとSpring Cloudの豊富なサポートライブラリ、サーバ、パターン、テンプレを組み合わせて、マイクロサービスベースのアーキテクチャ全体をデプロイする
Spring is fast
- デフォルトで高速起動、高速シャットダウン、最適化された実行が実現する
Spring is secure
- セキュリティ問題に迅速かつ責任を持って対処してきた
- Springのコミッターはセキュリティ専門家と協力し、報告された脆弱性を修正してテストする
Spring is supportive
- コミュニティは大きく、グローバル、多様性
What Spring can do?
- マイクロサービス
- 独立している
- 本番環境レベルの機能を迅速に提供する
- Reactive
- 非同期非ブロッキングアーキテクチャ
- Cloud
- プラットフォームに関係なくサービスを接続して拡張する
- Web apps
- あらゆるデータストアに接続された高速で安全かつ応答性の高いWebアプリケーションのためのフレームワーク
- サーバレス
- 需要に応じて、スケールアップする
- Event Driven
- ビジネスイベントに反応する
- ストリーミングデータに基づいてリアルタイムに操作する
- Batch
- 自動化されたタスク
Maven
pom.xml
下記に、インストールしたpom.xmlを記載します
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>sampleapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>sampleapp</name>
<description>Demo project for Spring Boot</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
project
- 基本的な情報。変更することはありません
- ルートになります
parent
- pom.xmlの継承に関する設定
- Mavenでは、既にあるpom.xmlを継承して、新たに作成できる
- 上記の例では、org.springframework.bootのspring-bbot-starter-parentのpomが継承されている
properties
- ビルドに必要な設定を記載する
- 上記の例では、java.versionの17を指定している
dependencies
- プロジェクトで利用するライブラリ等の情報を記載する
- さらに下記を記載する
- groupId
- 上記では、下記が指定されている
- org.springframework.boot
- Webアプリを作成する際に必要となる
- spring-boot-starter-test
- ユニットテストに関するライブラリ
- org.springframework.boot
- 上記では、下記が指定されている
- artifactId
- version
- scope
- groupId
modelVersion
- Mavenのバージョン
groupId
- グループIDのタグ
artifactId
- アーティファクトID
version
- バージョン名のタグ
name
- プロジェクト名
description
- 説明
buildとplugins
- プログラムのビルド時に利用される機能などの情報
- 上記では、下記が指定されている
- org.springframework.boot
- spring-boot-maven-plugin
実践
前提
下記を利用しています。
- Mac
- VSCode
- Homebrew
環境の準備
JDKのインストール
JDKは、Amazon Corretto 17をインストールします
- [Amazon Corretto JDKのインストーラー(https://docs.aws.amazon.com/ja_jp/corretto/)のページに遷移します
- Corretto17の画面に遷移します
- ナビゲーションペインで、「Downloads」をクリックします
- Mac OSのインストーラーをダウンロードします
- ダウンロードしたファイルをクリックします
- インストーラーが起動するので、インストールします
- 下記のコマンドを実行し、インストールを確認します
$ /usr/libexec/java_home --verbose Matching Java Virtual Machines (1): 17.0.11 (x86_64) "Amazon.com Inc." - "Amazon Corretto 17" /Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home /Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home $
- 環境変数をセットします
export JAVA_HOME=/Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home
- バージョンを確認します
$ java --version openjdk 17.0.11 2024-04-16 LTS OpenJDK Runtime Environment Corretto-17.0.11.9.1 (build 17.0.11+9-LTS) OpenJDK 64-Bit Server VM Corretto-17.0.11.9.1 (build 17.0.11+9-LTS, mixed mode, sharing) $
Mavenのインストール
- Homebrewでmavenをインストールします
$ brew install maven
- インストールの確認
$ mvn -v Apache Maven 3.9.8 (36645f6c9b5079805ea5009217e36f2cffd34256) Maven home: /usr/local/Cellar/maven/3.9.8/libexec Java version: 17.0.11, vendor: Amazon.com Inc., runtime: /Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home Default locale: ja_JP, platform encoding: UTF-8 OS name: "mac os x", version: "14.5", arch: "x86_64", family: "mac" $
VSCodeに Spring Boot Extension Packをインストール
-
VSCodeを起動します。
-
検索ウインドウに 「Spring Boot Extension Pack」を入力し検索します
-
インストール後、VSCodeを再起動します
Extension Pack for Javaをインストール
-
検索ウインドウに 「Extension Pack for Java」を入力し検索します
-
インストール後、VSCodeを再起動します
実装する
プロジェクトの作成
Spring Boot Dashboard
-
APPS、BEANS、ENDPOINT MAPPINGSが表示されます
-
APPSの「sampleAppApplication」を選択します
-
下記のコードが表示されました
package com.example.sampleapp; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SampleappApplication { public static void main(String[] args) { SpringApplication.run(SampleappApplication.class, args); } }
-
Spring が実行されました。
$ cd /Users/XXXX/git/spring/sampleapp ; /usr/bin/env /Library/Java/JavaVirtualMachines/amazon-corretto-17.jdk/Contents/Home/bin/java @/var/folders/0q/3t1v6lb91qj08tz8t9s qyp5m0000gn/T/cp_37dhc661wrdwo8a54ua9nys11.argfile com.example.sampleapp.SampleappApplication . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.3.1) 2024-07-09T22:29:17.845+09:00 INFO 14879 --- [sampleapp] [ main] c.e.sampleapp.SampleappApplication : Starting SampleappApplication using Java 17.0.11 with PID 14879 (/Users/XXXX/git/spring/sampleapp/target/classes started by XXX in /Users/XXXX/git/spring/sampleapp) 2024-07-09T22:29:17.848+09:00 INFO 14879 --- [sampleapp] [ main] c.e.sampleapp.SampleappApplication : No active profile set, falling back to 1 default profile: "default" 2024-07-09T22:29:18.625+09:00 INFO 14879 --- [sampleapp] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http) 2024-07-09T22:29:18.637+09:00 INFO 14879 --- [sampleapp] [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2024-07-09T22:29:18.637+09:00 INFO 14879 --- [sampleapp] [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.25] 2024-07-09T22:29:18.679+09:00 INFO 14879 --- [sampleapp] [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2024-07-09T22:29:18.680+09:00 INFO 14879 --- [sampleapp] [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 787 ms 2024-07-09T22:29:18.979+09:00 INFO 14879 --- [sampleapp] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/' 2024-07-09T22:29:18.988+09:00 INFO 14879 --- [sampleapp] [ main] c.e.sampleapp.SampleappApplication : Started SampleappApplication in 1.468 seconds (process running for 7.057)
サンプルコードの解説
アノテーション
- アノテーションを付与することで、Spring Bootで起動するアプリケーションと認識し、必要な設定ファイルなどを自動的に組み込んでくれます
@SpringBootApplication
SpringApplicationクラス
- SpringApplicationクラスは、Spring Bootアプリケーションの基本的なクラス
- 引数に、実行クラスのClassインスタンスと、パラメータを渡す
SpringApplication.run(SampleappApplication.class, args);
考察
今回、Spring Bootの特徴を簡単に整理し、環境構築してみました。今後も試してみたいと思います。
参考