Spring の学習ノート ---SpringBoot のクイックスタート
春の学習ノート—SpringBoot
今日の目標:
- SpringBootフレームワークをベースにしたプログラム開発の手順をマスターする
- SpringBoot 構成情報を使用してサーバー構成を変更することに精通している
- SpringBoot に基づいた完全な SSM 統合プロジェクト開発
1 SpringBoot の概要
SpringBoot
Pivotal
チームが提供する新しいフレームワークであり、使用するように設計されています。簡略化する Spring
適用済み初期設定同様に開発プロセス。
フレームワークを使用することでSpring
開発が簡素化されました。また、開発が簡素化されるため、そのシンプルさと広範な使用が想像できるでしょSpringBoot
う。は開発を簡素化するために使用されるため、開発を例にして最初に確認してみましょう。Spring
SpringBoot
SpringBoot
Spring
SpringMVC
- プロジェクトを作成し、
pom.xml
構成ファイルで依存座標を構成します
-
web3.0
構成クラスを書くweb
プログラムとしてはweb3.0
設定クラスが必須なのですが、この設定クラスがかなり面倒なのです。
-
SpringMVC
構成クラスを書く
これを行うには、プロジェクトの枠組みを構築するだけです。外部からアクセスするには、少なくともController
クラスとそのクラス内にメソッドを提供する必要があります。
- 書き込み
Controller
クラス
上記のSpringMVC
プログラム開発から、最初の 3 つのステップはすべて環境のセットアップに関するものであり、これらの 3 つのステップは基本的に固定されていることがわかります。SpringBoot
これは、これら 3 つの手順を簡素化するためです。次に、入門ケースを使用して、SpingBoot
簡略化されたSpring
開発を示します。
1.1 SpringBoot クイックスタート
1.1.1 開発手順
SpringBoot
開発は非常に簡単で、次の手順に分かれています。
- 新しいモジュールを作成し、Spring 初期化を選択し、モジュールに関する基本情報を構成します。
- 現在のモジュールで使用するテクノロジー セットを選択します
- コントローラークラスの開発
- 自動生成された Application クラスを実行する
SpringBoot
の開発手順がわかったら、具体的な操作を進めていきましょう
1.1.1.1 新しいモジュールの作成
-
+
「選択」「New Module
新規モジュールの作成」をクリックします
-
プロジェクトの
Spring Initializr
作成に使用される を選択しますSpringBoot
以前は を選択しましたが、今日はプロジェクトを迅速に構築することを
Maven
選択します。この項目では、インストールしたバージョンを選択します。Spring Initializr
SpringBoot
Module SDK
JDK
-
プロジェクトに
SpringBoot
関連する設定を行うこの方法を使用して構築するプロジェクトは
SpringBoot
実際にはMaven
プロジェクトであり、この方法は簡単に構築する方法にすぎません。
注: ここでのパッケージ化方法は次のように設定する必要があります。
Jar
-
選択し
Web
てチェックを入れますSpring Web
web
テクノロジーを利用したプログラムを開発する必要があるのでSpringMVC
、以下の赤枠にチェックを入れます。
-
下の図のインターフェイスは変更する必要がなく、クリックするだけでプロジェクトの構築が
Finish
完了します。SpringBoot
Application
上記の手順を実行すると、次の構造のモジュールが作成され、後でサーバーを起動するときに使用するクラスを自動生成するのに役立ちます。
知らせ:
作成したプロジェクトに設定クラスを作成する必要はありません
作成されたプロジェクトは他のファイルを自動的に生成しますが、これらのファイルは現在使用する必要がないため、削除しても問題ありません。
削除できるディレクトリとファイルは以下のとおりです。
.mvn
.gitignore
HELP.md
mvnw
mvnw.cmd
1.1.1.2 作成Controller
com.itheima.controller
パッケージの下に作成されたコードBookController
は次のとおりです。
@RestController
@RequestMapping("/books")
public class BookController {
@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println("id ==> "+id);
return "hello , spring boot!";
}
}
1.1.1.3 サーバーの起動
プロジェクトを実行するためにSpringBoot
ローカルとプラグインを使用する必要はありません。Tomcat
プロジェクト パッケージcom.itheima
内のクラスのみが実行されますApplication
。コンソールには次の情報が表示されます。
1.1.1.4 テストの実施
ツールを使用してPostman
プログラムをテストする
SpringBoot
上記の導入事例から、開発に を使用すると開発全体が非常に簡単になることがわかります。
この問題を研究するには、Application
クラスとpom.xml
について何が書かれているかを調べる必要があります。まずクラスを見てみましょうApplicaion
. このクラスの内容は次のとおりです。
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
このクラスの内容は非常に単純で、@SpringBootApplication
クラスにアノテーションを追加するだけで、メイン メソッドのコードは 1 行だけです。このクラスの main メソッドは、サーバーの起動時に実行されます。
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>2.5.0</version>
</parent>
<groupId>com.itheima</groupId>
<artifactId>springboot_01_quickstart</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--JDK 的版本-->
<properties>
<java.version>8</java.version>
</properties>
<dependencies>
<!--该依赖就是我们在创建 SpringBoot 工程勾选的那个 Spring Web 产生的-->
<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>
コードを簡素化できる理由は、指定された親プロジェクトとSpring Web
依存関係の実装のためです。詳細については後ほどお話します。
1.1.2 比較
SpringBoot
導入ケースが終わったら、Spring
プログラムとSpringBoot
プログラムを比較してみましょう。以下に示すように
-
座標
Spring
プログラム内の座標は自分で記述する必要があり、座標がたくさんありますSpringBoot
プログラム内の座標はプロジェクト作成時にチェックして自動生成されます。 -
web3.0構成クラス
Spring
プログラムはこの構成クラスを独自に記述する必要があります。誰もが以前にこの構成クラスを作成したことがありますが、非常に複雑に感じられるはずです。SpringBoot
プログラムを自分で書く必要はありません -
構成クラス
Spring/SpringMVC
プログラムの構成クラスは自分で記述する必要があります。プログラムSpringBoot
を記述する必要はありません。
注:アイデアに基づいてプロジェクトを
Spring Initializr
迅速に構築するには、SpringBoot
インターネット接続が必要です。
1.1.3 公式サイト構築プロジェクト
エントリーレベルの場合は、公式 Web サイトが提供するコンポーネントを使用して実装されるSpringBoot
ため、プロジェクトを迅速に構築できます。では、公式 Web サイトでプロジェクトを構築するにはどうすればよいでしょうか? 次の手順でビルドしますIdea
SpringBoot
1.1.3.1 SpringBoot 公式 Web サイトにアクセスします。
公式サイトのアドレスは以下の通りです。
https://spring.io/projects/spring-boot
SpringBoot
公式サイトに入ったら一番下までドラッグすると以下の内容が表示されます
ハイパーリンクをクリックするとSpring Initializr
、次のページにジャンプします
Idea
このページの内容に見覚えはありますか? 基本的には、 Quick Buildプロジェクトを使用するために使用するインターフェイスと同じですSpringBoot
。上のページに該当する情報を入力してください
1.1.3.2 依存関係の選択
選択するには、Spring Web
上の図の右上隅にあるボタンをクリックするとADD DEPENDENCIES... CTRL + B
、次のインターフェイスが表示されます。
1.1.3.3 プロジェクトの生成
上記の手順が完了すると、SpringBoot
プロジェクトを生成できるようになります。GENERATE CTRL + 回车
次の図に示すように、ページの下部にあるボタンをクリックしてプロジェクトを生成し、ローカルにダウンロードします。
Idea
ダウンロードした圧縮パッケージを開くと、以下に示すように、プロジェクト構造が、使用して生成されたものとまったく同じであることがわかります。
pom.xml
ファイルを開くと、Spring Web
親プロジェクトの依存関係も含まれています。
上記の公式 Web サイトの操作を通じて、公式 Web サイト内のIdea
クイック ビルドSpringBoot
プロジェクトが実際には公式 Web サイトのクイック ビルド コンポーネントであることがわかりました。今後は、公式 Web サイトが存在しない場合でも、Idea
公式 Web サイトを使用してビルドできるようになります。SpringBoot
プロジェクト。
1.1.4 SpringBoot プロジェクトのクイックスタート
1.1.4.1 問題のインポート
将来的には、フロントエンド開発者と協力して開発を進めていきますが、フロントエンド開発者がフロントエンドプログラムをテストする必要がある場合、バックエンドでサーバーを開く必要があり、これはバックエンド開発者の対象となります。この制限を取り除くために、フロントエンド開発者は自分のコンピュータにバックエンド プログラムをインストールして起動しようとしますが、これは明らかに非現実的ですTomcat
。Idea
バックエンドはSpringBoot
プロジェクトをjar
パッケージにパッケージ化できます。jar
このパッケージの動作は依存せずTomcat
、これらのツールも正常に実行できます。実行プロセス中にこのパッケージが独自のプログラムと同じデータベースに接続する必要があるIdea
だけです。以下に示すように、これによりこの問題を解決できます。jar
Mysql
さて、問題はそれをどのように梱包するかということです。
1.1.4.2 梱包
SpringBoot
プロジェクトのビルド時にpom.xml
以下のプラグインを設定したので、
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
Maven
したがって、コマンドpackage
packageを使用して、ディレクトリ内にtarget
対応するパッケージを生成するだけで済みます。Jar
注: このプラグインは構成する必要があります。構成しないと、パッケージ化されたパッケージ
jar
に問題が発生します。
1.1.4.3 起動
jar
パッケージの場所を入力し、命令提示符
次のコマンドを入力します。
jar -jar springboot_01_quickstart-0.0.1-SNAPSHOT.jar
上記のコマンドを実行すると、SpringBoot
実行ログ情報が表示されます。
1.2 SpringBootの概要
SpringBoot
は、Pivotal チームが提供するまったく新しいフレームワークであり、次のように設計されています。簡略化する春のアプリケーション初期設定同様に開発プロセス。
誰もがすでにSpringBoot
このプログラムを経験していると思いますがSpringBoot
、その主な機能であるSpring
構築プロセスと開発プロセスを簡素化することを振り返ってみましょう。
独自のSpring
環境構築・開発においては以下のような問題がありました。
- 設定が面倒
- 依存関係の設定が面倒
SpringBoot
Spring
このプログラムの利点は、たまたまその欠点を狙ったものです。
- 自動構成。これは、
Spring
複雑なプログラム構成の問題を解決するために使用されます。 - 依存を開始します。これは、
Spring
煩雑なプログラムの依存関係設定の問題を解決するために使用されます。 - アクセシビリティ (内蔵サーバーなど)。プログラムの起動時に
SpringBoot
ローカルtomcat
もプラグインも使用せず、内蔵サーバーを使用します。tomcat
SpringBoot
SpringBoot
次に、開始時の依存関係について説明します。
1.2.1 依存関係の開始
以下に示すように、メソッドを使用してSpring Initializr
作成したMaven
プロジェクトのpom.xml
構成ファイルには、以下を含む多くの依存関係が自動的に生成されます。starter
これらの依存関係は、起動時の依存関係、彼がそれをどのように達成したかを見てみましょう。
1.2.1.1 親プロジェクトを調べる
上記ファイルから親プロジェクトが指定されていることが分かりますが、親プロジェクトに入ると、下図のように親プロジェクトの中に別の親プロジェクトが指定されていることがわかります。
次に、親プロジェクトに入ります。このプロジェクトでは、次のような構成コンテンツ構造が表示されます。
上の図のタグproperties
は、各テクニカル ソフトウェアが依存するバージョンを定義しているため、異なるソフトウェア テクノロジを使用するときにバージョンの互換性の問題を考慮する必要がなくなります。では、以下に示すようにとのバージョンがproperties
見つかります。servlet
mysql
dependencyManagement
このタグは依存関係のバージョンをロックするためのものですが、対応する依存関係はインポートされません。プロジェクトでその依存関係が必要な場合は、依存関係を導入するだけでよく、定義する必要はありgroupid
ませartifactId
んversion
。
以下に示すように、プラグインのバージョンもbuild
タグでロックされます。
pom.xml
親プロジェクトの構成を読めば、プロジェクトの依存関係が構成されていない理由を理解するのは難しくありませんversion
。
1.2.1.2 依存関係の調査
作成したプロジェクトpom.xml
では次の依存関係が構成されています
依存関係を入力し、pom.xml
依存関係を確認すると、次の依存関係が導入されていることがわかります。
これにより、spring-web
との依存関係が導入されますspring-webmvc
。そのため、私たちのプロジェクトでは、springMVC
これら 2 つのパッケージに依存せずに の注釈を使用できます。
依存関係についてはspring-boot-starter-tomcat
、基本的に名前から内部の依存関係が確認できるのでtomcat
、プロジェクトは正常に開始できます。
結論: 将来テクノロジーを使用する必要がある場合は、そのテクノロジーに対応する開始依存関係を導入するだけで済みます。
1.2.1.3 概要
スターター
SpringBoot
の共通プロジェクト名。依存関係の構成を減らすという目的を達成するために、現在のプロジェクトで使用されるすべてのプロジェクト座標を定義します。
親
-
SpringBoot
継承されるすべてのプロジェクトは、依存関係の競合を減らすという目的を達成するために、複数の調整バージョン番号 (依存関係ではなく依存関係管理) を定義します。 -
spring-boot-starter-parent
(2.5.0) と(2.4.6)spring-boot-starter-parent
の間には、合計 57 の異なる座標バージョンがあります。
実際の開発
-
任意の座標を使用する場合は、GAV に G と A のみを記述します。V は SpringBoot によって提供されます
G:グループID
A:アーティファクトID
V:バージョン
-
座標エラーが発生した場合は、バージョンを再指定してください(バージョンの競合に注意してください)
1.2.2 プログラムの起動
作成されたすべてのプログラムには、SpringBoot
次のようなクラスが含まれており、このクラスをブートストラップ クラスと呼びます。
@SpringBootApplication
public class Springboot01QuickstartApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot01QuickstartApplication.class, args);
}
}
知らせ:
-
SpringBoot
プロジェクトを作成するときは、jar パッケージング方式を使用します -
SpringBoot
ブート クラスはプロジェクトのエントリ ポイントであり、main
プロジェクトはメソッドを実行することで開始できます。で依存関係
pom.xml
を構成し、依存関係は以前の学習を通じてその依存関係を認識しているため、 runメソッドを使用してプロジェクトを開始できます。spring-boot-starter-web
tomcat
main
tomcat
1.2.3 Webサーバーの切り替え
プロジェクトを開始するためにサーバーを使用しているのですが、サーバーを使用する代わりにサーバーtomcat
を使用できますか?上級バージョンでは、プライベート サーバーで使用されるサーバーについて説明します。サーバーを切り替えるには、デフォルトのサーバーを除外する必要があります。除外するにはどうすればよいですか? タグを使用するtomcat
jetty
jetty
maven
maven
web
tomcat
exclusion
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-tomcat</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
さて、ブートストラップ クラスを実行できますか? 実行してみると、出力されるログ情報は次のとおりです。
プログラムが直接停止しました。なぜですか? これは、tomcat
サーバーを除外すると、プログラム内にサーバーが存在しなくなるためです。tomcat
したがって、この時点でサーバーを除外するだけでなく、jetty
サーバーも導入する必要があります。開始依存関係がpom.xml
あるため、jetty
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
jetty
次に、ブート クラスを再度実行すると、サーバーが使用されていることがログ情報で確認できます。
まとめ:
SpringBoot
サーバーを切り替えることにより、スイッチング テクノロジを使用する場合、テクノロジの開始時の依存関係をインポートするだけで済むことがわかります。
2つの設定ファイル
2.1 設定ファイルの形式
ここでサーバーを起動するときのデフォルトのポート番号は で8080
、アクセス パスは次のように記述できます。
http://localhost:8080/books/1
80
オンライン環境では、アクセス時にポート番号を書き込む必要がないように、次のようにポート番号を変更したいと考えています。
http://localhost/books/1
そして、SpringBoot
プログラムをどのように修正するのでしょうか?SpringBoot
さまざまな属性設定方法を提供します
-
application.properties
server.port=80
-
application.yml
server: port: 81
-
application.yaml
server: port: 82
注:
SpringBoot
プログラムの構成ファイル名は である必要がありますapplication
。サフィックス名のみが異なります。
2.1.1 環境の準備
さまざまな構成ファイルをデモンストレーションするために新しいプロジェクトを作成しますspringboot_02_base_config
。プロジェクト環境は導入ケースとまったく同じで、構造は次のとおりです。
プロジェクト内のcom.itheima.controller
パッケージの下に名前を付けたコントローラーを作成しますBookController
。内容は以下の通りです。
@RestController
@RequestMapping("/books")
public class BookController {
@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println("id ==> "+id);
return "hello , spring boot!";
}
}
2.1.2 さまざまな構成ファイルのデモンストレーション
- application.properties 構成ファイル
ここで設定する必要があります。一致するファイルをresources
ディレクトリに配置する必要があります。application.properties
このディレクトリには設定ファイルという名前があります。設定ファイル内のポート番号を変更し、設定ファイルに書き込むとport
、Idea
次のようなプロンプトが表示されます。
application.properties
設定ファイルの内容は以下のとおりです。
server.port=80
サービスを開始するとコンソールにログ情報が出力され、バインドされているポート番号が変更されていることがわかります。
- application.yml 設定ファイル
application.properties
設定ファイルの内容を削除します。resources
以下の名前の設定ファイルを作成しapplication.yml
、ファイル内にポート番号の設定項目を以下の形式で記述します。
server:
port: 81
注: の後
:
、データの前にスペースを追加する必要があります。
設定ファイルにはプロンプト機能もありyml
、ファイルに記述することもできますport
。すると、idea
プロンプトが表示され、上記の形式で書き込まれます。
サービスを開始すると、バインドされたポート番号がコンソールに表示されます。81
- application.yaml 設定ファイル
application.yml
構成ファイルとapplication.properties
構成ファイルの内容resources
を削除し、 という名前の構成ファイルを作成します。構成内容は、application.yaml
サフィックスyml
が付いている構成ファイルの内容と同じですが、異なるサフィックスが使用されます。
application.yaml
設定ファイルの内容は以下のとおりです。
server:
port: 83
サービスを開始すると、コンソールにバインドされたポート番号が表示されます。
注: 連携ファイルにプロンプトがない場合は、次の方法を使用して問題を解決できます。
-
クリックし
File
て選択してくださいProject Structure
-
以下の画面が表示されますので、画像内の赤枠部分をクリックして選択してください。
-
上記の操作後、次のウィンドウが表示されます
-
上の図のアイコンをクリックすると、
+
モジュールを選択するための構成ファイルがポップアップ表示されます。
-
上記の手順を完了すると、次のインターフェイスが表示されます。
properties
タイプに一致するファイルが 1 つと、ymal
そのタイプに 2 つの構成ファイルがあります
2.1.3 一致する 3 つのファイルの優先順位
3 つの連携ファイルに異なるポート番号を設定し、サービスを開始してバインドされたポート番号を確認します。このようにして、どの設定ファイルの優先度が高いかを確認できます。
application.properties
ファイルの内容は次のとおりです。
server.port=80
application.yml
ファイルの内容は次のとおりです。
server:
port: 81
application.yaml
ファイルの内容は次のとおりです。
server:
port: 82
サービスを開始すると、コンソールで使用されているポート番号が表示されます80
。説明がapplication.properties
最も優先されます
application.properties
設定ファイルの内容をコメントアウトします。サービスを再度開始すると、コンソールで使用されているポート番号が表示され81
、application.yml
構成ファイルが 2 番目に優先されていることを示します。
上記の検証結果から、3 つの構成ファイルの優先順位は次のとおりであることがわかります。
application.properties
> application.yml
>application.yaml
知らせ:
SpringBoot
コア構成ファイルの名前は次のとおりです。application
SpringBoot
組み込み属性が多すぎるため、すべての属性がまとめて変更されます。使用する場合は、プロンプト キー + キーワードで属性を変更してください。たとえば、ログ レベルを設定したい場合は、設定ファイルにそれを書き込むと
logging
、プロンプトが表示されます。設定内容は以下の通りですlogging: level: root: info
2.2 yaml形式
上では 3 つの異なるタイプの構成ファイルについて説明し、一致するファイルのタイプについては以前に学習しました。次に、構成ファイルのタイプproperties
に焦点を当てます。yaml
YAML (YAML Ain't Markup Language)、データシリアル化形式。近年ではこの形式の設定ファイルが主流になっているため、初期に使用されていた設定ファイルに比べていくつかの利点があります。
最初はxml
次の形式を使用しました。
<enterprise>
<name>itcast</name>
<age>16</age>
<tel>4006184000</tel>
</enterprise>
そして、properties
タイプの設定ファイルは次のとおりです
enterprise.name=itcast
enterprise.age=16
enterprise.tel=4006184000
yaml
タイプ設定ファイルの内容は以下の通りです
enterprise:
name: itcast
age: 16
tel: 4006184000
アドバンテージ:
-
読みやすい
yaml
タイプ構成ファイルは、xml
タイプ構成ファイルよりも読みやすく、構造が明確です。 -
スクリプト言語との対話が簡単
-
データを核とし、フォーマットを無視してデータに焦点を当てる
yaml
よりデータとxml
フォーマットを重視
YAML ファイル拡張子:
.yml
(主流).yaml
上記のサフィックス名はどちらも使用できますが、将来的によく使用される方が使用されますyml
。
2.2.1 文法規則
-
大文字と小文字を区別
-
複数の行を使用して属性の階層関係を記述し、各行の末尾にコロンを使用します。
-
インデントを使用して階層関係を示し、同じレベルの左に揃えます。スペースのみを使用できます (Tab キーは使用できません)。
同じレベルの左揃えが確保されている限り、スペースの数は関係ありません。
-
属性値の前にスペースを追加します (属性名と属性値の間の区切りとしてコロン + スペースを使用します)。
-
# はコメントを表します
基本ルール: データはスペースとコロンで区切る必要があります
配列データの場合、データ書き込み位置の下にマイナス記号をデータの開始記号として使用し、1行に1つのデータを書き込み、マイナス記号とデータをスペースで区切ります。
enterprise:
name: itcast
age: 16
tel: 4006184000
subject:
- Java
- 前端
- 大数据
2.3 yaml設定ファイルのデータの読み込み
2.3.1 環境の準備
次のディレクトリspringboot_03_read_data
構造で名前を付けた新しいプロジェクトを作成します。SpringBoot
com.itheima.controller
パッケージ内でBookController
次の内容を含む名前のコントローラーを作成します。
@RestController
@RequestMapping("/books")
public class BookController {
@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println("id ==> "+id);
return "hello , spring boot!";
}
}
com.itheima.domain
データのカプセル化に使用するエンティティクラスをパッケージなどの下に名前を付けて作成しますEnterprise
。内容は以下の通りです
public class Enterprise {
private String name;
private int age;
private String tel;
private String[] subject;
//setter and getter
//toString
}
resources
の下application.yml
に別のデータを設定した構成ファイルを作成します。内容は次のとおりです。
lesson: SpringBoot
server:
port: 80
enterprise:
name: itcast
age: 16
tel: 4006184000
subject:
- Java
- 前端
- 大数据
2.3.2 構成データの読み取り
2.3.2.1 @Value アノテーションの使用
注釈を使用して、@Value("表达式")
一致するファイルからデータを読み取ります。注釈内の属性名を読み取るための参照方法は次のとおりです。${一级属性名.二级属性名……}
BookController
次のように、アノテーションを使用して@Value
、一致するファイル データを取得できます。
@RestController
@RequestMapping("/books")
public class BookController {
@Value("${lesson}")
private String lesson;
@Value("${server.port}")
private Integer port;
@Value("${enterprise.subject[0]}")
private String subject_00;
@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println(lesson);
System.out.println(port);
System.out.println(subject_00);
return "hello , spring boot!";
}
}
2.3.2.2 環境オブジェクト
上記のメソッドで読み込むデータは特に分散しているため、アノテーションインジェクションオブジェクトを利用してデータを読み込むことSpringBoot
もできます。このメソッドは、設定ファイル内のすべてのデータをオブジェクトにカプセル化します。どのデータを使用する必要がある場合は、オブジェクトのメソッドを呼び出して取得するだけです。具体的なコードは次のとおりです。@Autowired
Environment
SpringBoot
Environment
Environment
getProperty(String name)
@RestController
@RequestMapping("/books")
public class BookController {
@Autowired
private Environment env;
@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println(env.getProperty("lesson"));
System.out.println(env.getProperty("enterprise.name"));
System.out.println(env.getProperty("enterprise.subject[0]"));
return "hello , spring boot!";
}
}
注: このように、フレームワークには大量のデータが含まれていますが、開発ではほとんど使用されません。
2.3.2.3 カスタムオブジェクト
SpringBoot
また、構成ファイル内のデータをカスタム エンティティ クラス オブジェクトにカプセル化する方法も提供します。具体的な操作は以下の通りです。
-
エンティティ クラス
bean
の作成はSpring
管理者に任せます。クラスに
@Component
アノテーションを追加する -
@ConfigurationProperties
アノテーションを使用して構成ファイルをロードしますこのアノテーションの
prefix
属性を使用して、指定されたプレフィックスを持つデータのみがロードされるように指定することもできます。 -
BookController
注入する
具体的なコードは次のとおりです。
Enterprise
エンティティクラスの内容は次のとおりです。
@Component
@ConfigurationProperties(prefix = "enterprise")
public class Enterprise {
private String name;
private int age;
private String tel;
private String[] subject;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String[] getSubject() {
return subject;
}
public void setSubject(String[] subject) {
this.subject = subject;
}
@Override
public String toString() {
return "Enterprise{" +
"name='" + name + '\'' +
", age=" + age +
", tel='" + tel + '\'' +
", subject=" + Arrays.toString(subject) +
'}';
}
}
BookController
内容は以下の通りです。
@RestController
@RequestMapping("/books")
public class BookController {
@Autowired
private Enterprise enterprise;
@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println(enterprise.getName());
System.out.println(enterprise.getAge());
System.out.println(enterprise.getSubject());
System.out.println(enterprise.getTel());
System.out.println(enterprise.getSubject()[0]);
return "hello , spring boot!";
}
}
知らせ:
3 番目の方法を使用すると、エンティティ クラスに次の警告プロンプトが表示されます。
この警告に対する解決策は、pom.xml
次の依存関係を追加することです。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
2.4 マルチ環境構成
今後、仕事では、開発段階では自分のPCにインストールして自分のPCに接続するなど、開発環境、テスト環境、本番環境の構成は確実に変わってきます。 , プロジェクトの開発後、mysql
オンラインにする必要がありますmysql
。この構成により、環境構成がオンライン環境に変更されます。
構成を前後に変更するのは面倒な場合がありますが、SpringBoot
開発者は複数の環境に対して迅速な構成を利用できるため、環境を切り替える必要がある場合は 1 つの構成を変更するだけで済みます。設定ファイルの種類によりマルチ環境開発時の設定が異なりますので、次に設定ファイルの種類について説明します。
2.4.1 yaml ファイル
異なる構成を区切るためapplication.yml
に使用します---
。内容は次のとおりです。
#开发
spring:
profiles: dev #给开发环境起的名字
server:
port: 80
---
#生产
spring:
profiles: pro #给生产环境起的名字
server:
port: 81
---
#测试
spring:
profiles: test #给测试环境起的名字
server:
port: 82
---
上記の構成ではspring.profiles
、 はさまざまな構成に名前を付けるために使用されます。そして、SpringBoot
どの構成を使用するかを判断するにはどうすればよいでしょうか? 次の構成を使用して、両方の構成を有効にできます。
#设置启用的环境
spring:
profiles:
active: dev #表示使用的是开发环境的配置
まとめると、application.yml
設定ファイルの内容は次のようになります
#设置启用的环境
spring:
profiles:
active: dev
---
#开发
spring:
profiles: dev
server:
port: 80
---
#生产
spring:
profiles: pro
server:
port: 81
---
#测试
spring:
profiles: test
server:
port: 82
---
知らせ:
上記の構成でさまざまな構成に名前を付けるために使用されていた構成項目はspring.profiles
廃止されました。名前に使用される最新の構成アイテムは次のとおりです。
#开发
spring:
config:
activate:
on-profile: dev
2.4.2 プロパティファイル
properties
複数の環境を構成するには、構成ファイルの種類ごとに異なる構成ファイルを定義する必要があります。
-
application-dev.properties
開発環境の設定ファイルです。このファイルのポート番号を次のように設定します。80
server.port=80
-
application-test.properties
テスト環境の設定ファイルです。このファイルのポート番号を次のように設定します。81
server.port=81
-
application-pro.properties
実稼働環境の構成ファイルです。このファイルのポート番号を次のように設定します。82
server.port=82
SpringBoot
デフォルトでは、指定された構成ファイルのみがロードされるapplication.properties
ため、構成ファイルでどの構成ファイルを有効にするかを設定する必要がありますapplication.properties
。構成は次のとおりです。
spring.profiles.active=pro
2.4.3 コマンドライン起動パラメータの設定
将来的には、でSpringBoot
開発したプログラムがパッケージ化され、経由でサービスが開始される予定です。そこで質問がありますが、環境を切り替えるにはどうすればよいでしょうか? 設定ファイルはjarパッケージに含まれているためです。jar
java -jar xxx.jar
jar
パッケージは実際には圧縮パッケージであり、解凍して変更し、最終的に jar パッケージにできることがわかっています。この方法は明らかに少し面倒ですが、次のように実行時に指定した環境をセットアップする方法をSpringBoot
提供します。jar
java –jar xxx.jar –-spring.profiles.active=test
では、この方法でポート番号を一時的に変更することはできるのでしょうか? 以下の方法でも可能です
java –jar xxx.jar –-server.port=88
もちろん、次のように、どの環境構成を有効にするかを指定したり、一時的にポートを指定したりするなど、複数の構成を同時に設定することもできます。
java –jar springboot.jar –-server.port=88 –-spring.profiles.active=test
テストした結果、コマンドラインで設定したポート番号の優先度が高い(つまり、コマンドラインで設定したポート番号が使用される)ことが分かりますが、実際に設定された優先度については公式サイトで説明されていますSpringBoot
。
公式ウェブサイトの設定の優先順位
https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config
上記サイトに入ると以下のページが表示されます
同じ設定項目を照合するために複数の方法が使用された場合、優先度の高い方法が有効になります。
2.5 設定ファイルの分類
開発完了後にテスターがテストを実施する必要があるシナリオがありますが、テスト環境と開発環境の多くの構成が異なるため、テスターはプロジェクトの実行時に多くの構成を次のように一時的に変更する必要があります。
java –jar springboot.jar –-spring.profiles.active=test --server.port=85 --server.servlet.context-path=/heima --server.tomcat.connection-timeout=-1 …… …… …… …… ……
この状況に対応して、SpringBoot
構成ファイルの異なる配置場所が定義され、場所ごとに配置の優先順位が異なります。
SpringBoot
中間レベル 4 構成ファイルの配置場所:
- 1级:クラスパス:application.yml
- 2级:クラスパス:config/application.yml
- レベル 3: ファイル: application.yml
- 4番目:ファイル:config/application.yml
説明する:レベルが高いほど優先度が高くなります。
2.5.1 コードのデモ
ここでは、構成ファイルの配置のさまざまなレベルの優先順位のみを示します。
2.5.1.1 環境の準備
以下のディレクトリspringboot_06_config_file
構造で名前を付けたプロジェクトを作成します。SpringBoot
resources
の下にという名前のディレクトリを作成しconfig
、 ディレクトリ内に設定ファイルを作成しapplication.yml
、設定ファイル内のポート番号を に設定します81
。内容は次のとおりです
server:
port: 81
resources
で作成した設定ファイルでapplication.yml
ポート番号を に設定すると80
、内容は以下のようになります
server:
port: 80
2.5.1.2 優先レベル 1 と 2 の確認
起動ブート クラスを実行すると、コンソールに次のログ情報が表示されます。
この結果から次のように結論付けることができますクラスパス下の構成ファイルはconfig
、クラスパス下の構成ファイルより優先されます。
2.5.1.3 優先レベル 2 および 4 の確認
レベル 4 を確認するには、次の手順に従って完了します。
-
プロジェクトを
jar
パッケージ化するパッケージ化
package
するプロジェクトをクリックしますjar
-
ハードドライブ上の
jar
パッケージの場所を見つけます
-
jar
パッケージが置かれているフォルダーを作成しconfig
、このフォルダーの下に構成ファイルを作成しapplication.yml
、調整ファイル内のポート番号を次のように設定します。82
-
コマンドラインで次のコマンドを使用してプログラムを実行します。
java -jar springboot_06_config_file-0.0.1-SNAPSHOT.jar
実行後のログ情報は以下の通りです
この結果から次のように結論付けることができます
config
ファイルの下の設定ファイル:クラスパスの下の設定ファイルよりも優先されます。
知らせ:
SpringBoot バージョン 2.5.0 にはバグがあるため、このバージョンを使用する場合は、
jar
現在のconfig
ディレクトリに任意の名前のフォルダーを作成する必要があります。
3 SpringBoot は junit を統合します
Spring
統合のレビューjunit
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfig.class)
public class UserServiceTest {
@Autowired
private BookService bookService;
@Test
public void testSave(){
bookService.save();
}
}
アノテーションを使用して@RunWith
ランナーを指定し、@ContextConfiguration
アノテーションを使用して構成クラスまたは構成ファイルを指定します。統合SpringBoot
はjunit
特に簡単で、次の 3 つの手順で完了できます。
- テストクラスに
SpringBootTest
アノテーションを追加する @Autowired
テストするリソースを注入するために使用します- テストのためのテストメソッドを定義する
3.1 環境の準備
という名前のプロジェクトを作成します。プロジェクトのディレクトリ構造はspringboot_07_test
次のとおりです。SpringBoot
com.itheima.service
以下にBookService
インターフェイスを作成します
public interface BookService {
public void save();
}
com.itheima.service.impl
パッケージ内にクラスを作成し、インターフェースBookServiceImpl
を実装させると内容は以下のようになりますBookService
@Service
public class BookServiceImpl implements BookService {
@Override
public void save() {
System.out.println("book service is running ...");
}
}
3.2 テストクラスの作成
test/java
の下にパッケージを作成しcom.itheima
、このパッケージの下にテスト クラスを作成し、BookService
テスト クラスに注入します。
@SpringBootTest
class Springboot07TestApplicationTests {
@Autowired
private BookService bookService;
@Test
public void save() {
bookService.save();
}
}
==注意:==ここでブート クラスが配置されているパッケージは、テスト クラスが配置されているパッケージとそのサブパッケージである必要があります。
例えば:
- ブートストラップ クラスが配置されているパッケージは次のとおりです。
com.itheima
- テストクラスが配置されているパッケージは次のとおりです。
com.itheima
@SpringBootTest
この要件が満たされていない場合は、アノテーションを使用するときに、属性を使用しclasses
てブート クラスのバイトコード オブジェクトを指定する必要があります。のように@SpringBootTest(classes = Springboot07TestApplication.class)
4 SpringBoot は mybatis を統合します
4.1 Spring の Mybatis 統合のレビュー
Spring
統合にはMybatis
多くの構成クラスを定義する必要があります
-
SpringConfig
構成クラス-
インポート
JdbcConfig
構成クラス -
インポート
MybatisConfig
構成クラス@Configuration @ComponentScan("com.itheima") @PropertySource("classpath:jdbc.properties") @Import({ JdbcConfig.class,MyBatisConfig.class}) public class SpringConfig { }
-
-
JdbcConfig
構成クラス -
データ ソースの定義 (ロード プロパティ設定項目: ドライバー、URL、ユーザー名、パスワード)
public class JdbcConfig { @Value("${jdbc.driver}") private String driver; @Value("${jdbc.url}") private String url; @Value("${jdbc.username}") private String userName; @Value("${jdbc.password}") private String password; @Bean public DataSource getDataSource(){ DruidDataSource ds = new DruidDataSource(); ds.setDriverClassName(driver); ds.setUrl(url); ds.setUsername(userName); ds.setPassword(password); return ds; } }
-
MybatisConfig
構成クラス-
意味
SqlSessionFactoryBean
-
マッピング構成の定義
@Bean public MapperScannerConfigurer getMapperScannerConfigurer(){ MapperScannerConfigurer msc = new MapperScannerConfigurer(); msc.setBasePackage("com.itheima.dao"); return msc; } @Bean public SqlSessionFactoryBean getSqlSessionFactoryBean(DataSource dataSource){ SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean(); ssfb.setTypeAliasesPackage("com.itheima.domain"); ssfb.setDataSource(dataSource); return ssfb; }
-
4.2 SpringBoot は mybatis を統合します
4.2.1 モジュールの作成
-
新しいモジュールを作成し、 を選択し
Spring Initializr
、モジュールに関する基本情報を構成します
-
現在のモジュール (MyBatis、MySQL) で使用するテクノロジー セットを選択します。
4.2.2 エンティティクラスの定義
com.itheima.domain
package 配下にエンティティクラスを定義します。Book
内容は次のとおりです
public class Book {
private Integer id;
private String name;
private String type;
private String description;
//setter and getter
//toString
}
4.2.3 DAOインターフェースの定義
com.itheima.dao
パッケージの下にインターフェイスを定義します。BookDao
内容は次のとおりです
public interface BookDao {
@Select("select * from tbl_book where id = #{id}")
public Book getById(Integer id);
}
4.2.4 テストクラスの定義
test/java
配下にパッケージを定義しcom.itheima
、その配下にあるクラスをテストする内容は以下の通りです
@SpringBootTest
class Springboot08MybatisApplicationTests {
@Autowired
private BookDao bookDao;
@Test
void testGetById() {
Book book = bookDao.getById(1);
System.out.println(book);
}
}
4.2.5 設定の書き込み
私たちのコードでは、接続するデータベース、ユーザー名、パスワードは指定されていません。したがって、この部分はSpringBoot
構成ファイル内で一致する必要があります。
application.yml
設定ファイルに以下の内容を設定します
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db
username: root
password: root
4.2.6 テスト
テスト メソッドを実行すると、次のエラー メッセージが表示されます。
エラー メッセージは、Spring
コンテナーにBookDao
型がないことを示していますbean
。なぜこのようなことが起こるのでしょうか?
その理由は、Mybatis
インターフェイスがスキャンされ、インターフェイスを作成するコード オブジェクトが管理者に引き渡されるためですが、今ではそれがどのインターフェイスであるかSpring
はわかりません。この問題を解決するには、インターフェイスでそれを使用する必要があります。インターフェイスは次のように改良されました。Mybatis
dao
BookDao
@Mapper
BookDao
@Mapper
public interface BookDao {
@Select("select * from tbl_book where id = #{id}")
public Book getById(Integer id);
}
知らせ:
SpringBoot
バージョンが 2.4.3 より低く (含まれていない)、Mysql ドライバーのバージョンが 8.0 より大きい場合、
jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
この問題を解決するには、URL 接続文字列でタイム ゾーンを構成するか、MySQL データベース側でタイム ゾーンを構成する必要があります。
4.2.7 Druid データソースの使用
ここではデータ ソースを指定していません。SpringBoot
デフォルトのデータ ソースがあります。Druid
データ ソースを指定し、次の手順に従ってそれを実現することもできます。
-
Druid
依存関係をインポートする<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.16</version> </dependency>
-
application.yml
設定ファイルの設定ではspring.datasource.type
どのデータ ソースを使用するかを設定できます。構成ファイルの内容は次のように改善できます。spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC username: root password: root type: com.alibaba.druid.pool.DruidDataSource
5件
SpringBoot
検討はこれで終わりですが、次に、検討SSM
中に行った 3 つの主要なフレームワークを統合して実装するケースを使用しますSpringBoot
。今回の作業は基本的に以前にやったものをコピーして に修正するだけですがSpringBoot
、主に以下の部分で完成します。
-
pom.xml
開始依存関係と必要なリソース座標を構成する (druid)
-
アプリケーション.yml
データソースやポートなどを設定します。
-
構成クラス
すべて削除
-
だお
@Mapperをセットアップする
-
テストクラス
-
ページ
リソースディレクトリの下の静的ディレクトリに配置します。
5.1 プロジェクトの作成
プロジェクトを作成します。SpringBoot
プロジェクトを作成する場合、 、 にチェックを入れる必要がありweb
、プロジェクトのディレクトリ構造は次のとおりです。mysql
mybatis
これはプロジェクトで使用されているため、次の座標をDruid
インポートする必要があります。Druid
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
5.2 コードのコピー
springmvc_11_page
プロジェクト内のコードとテストコードをjava
パッケージごとspringboot_09_ssm
プロジェクトにコピーし、以下のようにコピーします
修正が必要な内容は以下の通りです。
-
Springmvc_11_page
config
パッケージの下には構成クラスがありますが、SpringBoot
プロジェクトにはこれらの構成クラスは必要ないため、これらの構成クラスは直接削除できます。 -
dao
パッケージ内のインターフェイスをプロジェクトにコピーする場合は、springboot_09-ssm
インターフェイスに@Mapper
アノテーションを追加する必要があります。
例:
-
BookServiceTest
SpringBoot
テストを統合型junit
に変更する必要がある@SpringBootTest public class BookServiceTest { @Autowired private BookService bookService; @Test public void testGetById(){ Book book = bookService.getById(2); System.out.println(book); } @Test public void testGetAll(){ List<Book> all = bookService.getAll(); System.out.println(all); } }
5.3 設定ファイル
application.yml
設定ファイルには次の内容を設定する必要があります
- サービスポート番号
- データベース接続情報
- 情報元
server:
port: 80
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db #?servierTimezone=UTC
username: root
password: root
5.4 静的リソース
プログラムにはディレクトリがSpringBoot
ありません。では、静的リソースはプログラム内のどこに配置する必要があるのでしょうか?webapp
SpringBoot
以下の図に示すように、静的リソースはresources
の下に。static