Spring の学習ノート ---SpringBoot のクイックスタート

Spring の学習ノート ---SpringBoot のクイックスタート

春の学習ノート—SpringBoot

今日の目標:

  • SpringBootフレームワークをベースにしたプログラム開発の手順をマスターする
  • SpringBoot 構成情報を使用してサーバー構成を変更することに精通している
  • SpringBoot に基づいた完全な SSM 統合プロジェクト開発

1 SpringBoot の概要

SpringBootPivotalチームが提供する新しいフレームワークであり、使用するように設計されています。簡略化する Spring適用済み初期設定同様に開発プロセス

フレームワークを使用することでSpring開発が簡素化されました。また、開発が簡素化されるため、そのシンプルさと広範な使用が想像できるでしょSpringBootは開発を簡素化するために使用されるため開発を例にして最初に確認してみましょう。SpringSpringBootSpringBootSpringSpringMVC

  1. プロジェクトを作成し、pom.xml構成ファイルで依存座標を構成します

ここに画像の説明を挿入します

  1. web3.0構成クラスを書く

    webプログラムとしてはweb3.0設定クラスが必須なのですが、この設定クラスがかなり面倒なのです。
    ここに画像の説明を挿入します

  2. SpringMVC構成クラスを書く
    ここに画像の説明を挿入します

これを行うには、プロジェクトの枠組みを構築するだけです。外部からアクセスするには、少なくともControllerクラスとそのクラス内にメソッドを提供する必要があります。

  1. 書き込み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 InitializrSpringBootModule SDKJDK

ここに画像の説明を挿入します

  • プロジェクトにSpringBoot関連する設定を行う

    この方法を使用して構築するプロジェクトはSpringBoot実際にはMavenプロジェクトであり、この方法は簡単に構築する方法にすぎません。
    ここに画像の説明を挿入します

    注: ここでのパッケージ化方法は次のように設定する必要があります。Jar

  • 選択しWebてチェックを入れますSpring Web

    webテクノロジーを利用したプログラムを開発する必要があるのでSpringMVC、以下の赤枠にチェックを入れます。
    ここに画像の説明を挿入します

  • 下の図のインターフェイスは変更する必要がなく、クリックするだけでプロジェクトの構築がFinish完了します。SpringBoot

ここに画像の説明を挿入します

Application上記の手順を実行すると、次の構造のモジュールが作成され、後でサーバーを起動するときに使用するクラスを自動生成するのに役立ちます。

ここに画像の説明を挿入します

知らせ:

  1. 作成したプロジェクトに設定クラスを作成する必要はありません

  2. 作成されたプロジェクトは他のファイルを自動的に生成しますが、これらのファイルは現在使用する必要がないため、削除しても問題ありません。

    削除できるディレクトリとファイルは以下のとおりです。

    • .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 サイトでプロジェクトを構築するにはどうすればよいでしょうか? 次の手順でビルドしますIdeaSpringBoot

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 問題のインポート

ここに画像の説明を挿入します

将来的には、フロントエンド開発者と協力して開発を進めていきますが、フロントエンド開発者がフロントエンドプログラムをテストする必要がある場合、バックエンドでサーバーを開く必要があり、これはバックエンド開発者の対象となります。この制限を取り除くために、フロントエンド開発者は自分のコンピュータにバックエンド プログラムをインストールして起動しようとしますが、これは明らかに非現実的ですTomcatIdea

バックエンドはSpringBootプロジェクトをjarパッケージにパッケージ化できます。jarこのパッケージの動作は依存せずTomcat、これらのツールも正常に実行できます。実行プロセス中にこのパッケージが独自のプログラムと同じデータベースに接続する必要があるIdeaだけです。以下に示すように、これによりこの問題を解決できます。jarMysql
ここに画像の説明を挿入します

さて、問題はそれをどのように梱包するかということです。

1.1.4.2 梱包

SpringBootプロジェクトのビルド時にpom.xml以下のプラグインを設定したので、

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

Mavenしたがって、コマンドpackagepackageを使用して、ディレクトリ内にtarget対応するパッケージを生成するだけで済みます。Jar

注: このプラグインは構成する必要があります。構成しないと、パッケージ化されたパッケージjarに問題が発生します。

1.1.4.3 起動

jarパッケージの場所を入力し、命令提示符次のコマンドを入力します。

jar -jar springboot_01_quickstart-0.0.1-SNAPSHOT.jar

上記のコマンドを実行すると、SpringBoot実行ログ情報が表示されます。

ここに画像の説明を挿入します

1.2 SpringBootの概要

SpringBootは、Pivo​​tal チームが提供するまったく新しいフレームワークであり、次のように設計されています。簡略化する春のアプリケーション初期設定同様に開発プロセス

誰もがすでにSpringBootこのプログラムを経験していると思いますがSpringBoot、その主な機能であるSpring構築プロセスと開発プロセスを簡素化することを振り返ってみましょう。

独自のSpring環境構築・開発においては以下のような問題がありました。

  • 設定が面倒
  • 依存関係の設定が面倒

SpringBootSpringこのプログラムの利点は、たまたまその欠点を狙ったものです。

  • 自動構成。これは、Spring複雑なプログラム構成の問題を解決するために使用されます。
  • 依存を開始します。これは、Spring煩雑なプログラムの依存関係設定の問題を解決するために使用されます。
  • アクセシビリティ (内蔵サーバーなど)。プログラムの起動時にSpringBootローカルtomcatもプラグインも使用せず、内蔵サーバーを使用します。tomcatSpringBoot

SpringBoot次に、開始時の依存関係について説明します。

1.2.1 依存関係の開始

以下に示すように、メソッドを使用してSpring Initializr作成したMavenプロジェクトのpom.xml構成ファイルには、以下を含む多くの依存関係が自動的に生成されます。starter
ここに画像の説明を挿入します

これらの依存関係は、起動時の依存関係、彼がそれをどのように達成したかを見てみましょう。

1.2.1.1 親プロジェクトを調べる

上記ファイルから親プロジェクトが指定されていることが分かりますが、親プロジェクトに入ると、下図のように親プロジェクトの中に別の親プロジェクトが指定されていることがわかります。
ここに画像の説明を挿入します

次に、親プロジェクトに入ります。このプロジェクトでは、次のような構成コンテンツ構造が表示されます。
ここに画像の説明を挿入します

上の図のタグpropertiesは、各テクニカル ソフトウェアが依存するバージョンを定義しているため、異なるソフトウェア テクノロジを使用するときにバージョンの互換性の問題を考慮する必要がなくなります。では、以下に示すようにとのバージョンがproperties見つかります。servletmysql
ここに画像の説明を挿入します

dependencyManagementこのタグは依存関係のバージョンをロックするためのものですが、対応する依存関係はインポートされません。プロジェクトでその依存関係が必要な場合は、依存関係を導入するだけでよく、定義する必要はありgroupidませartifactIdversion

以下に示すように、プラグインのバージョンも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-webtomcatmaintomcat

1.2.3 Webサーバーの切り替え

プロジェクトを開始するためにサーバーを使用しているのですが、サーバーを使用する代わりにサーバーtomcatを使用できますか?上級バージョンでは、プライベート サーバーで使用されるサーバーについて説明します。サーバーを切り替えるには、デフォルトのサーバーを除外する必要があります。除外するにはどうすればよいですか? タグを使用するtomcatjettyjettymavenmavenwebtomcatexclusion

<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このディレクトリには設定ファイルという名前があります。設定ファイル内のポート番号を変更し、設定ファイルに書き込むとportIdea次のようなプロンプトが表示されます。
ここに画像の説明を挿入します

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設定ファイルの内容をコメントアウトします。サービスを再度開始すると、コンソールで使用されているポート番号が表示され81application.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もできます。このメソッドは、設定ファイル内のすべてのデータをオブジェクトにカプセル化します。どのデータを使用する必要がある場合は、オブジェクトのメソッドを呼び出して取得するだけです。具体的なコードは次のとおりです。@AutowiredEnvironmentSpringBootEnvironmentEnvironmentgetProperty(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パッケージに含まれているためです。jarjava -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アノテーションを使用して構成クラスまたは構成ファイルを指定します。統合SpringBootjunit特に簡単で、次の 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.domainpackage 配下にエンティティクラスを定義します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はわかりません。この問題を解決するには、インターフェイスでそれを使用する必要がありますインターフェイスは次のように改良されました。MybatisdaoBookDao@MapperBookDao

@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、主に以下の部分で完成します。

  1. pom.xml

    開始依存関係と必要なリソース座標を構成する (druid)

  2. アプリケーション.yml

    データソースやポートなどを設定します。

  3. 構成クラス

    すべて削除

  4. だお

    @Mapperをセットアップする

  5. テストクラス

  6. ページ

    リソースディレクトリの下の静的ディレクトリに配置します。

5.1 プロジェクトの作成

プロジェクトを作成しますSpringBootプロジェクトを作成する場合、 、 にチェックを入れる必要がありwebプロジェクトのディレクトリ構造は次のとおりです。mysqlmybatis
ここに画像の説明を挿入します

これはプロジェクトで使用されているため、次の座標を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_pageconfigパッケージの下には構成クラスがありますが、SpringBootプロジェクトにはこれらの構成クラスは必要ないため、これらの構成クラスは直接削除できます。

  • daoパッケージ内のインターフェイスをプロジェクトにコピーする場合は、springboot_09-ssmインターフェイスに@Mapperアノテーションを追加する必要があります。

例:
ここに画像の説明を挿入します

  • BookServiceTestSpringBootテストを統合型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ありません。では、静的リソースはプログラム内のどこに配置する必要があるのでしょうか?webappSpringBoot

以下の図に示すように、静的リソースはresourcesの下に。static
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/CSDN_Admin0/article/details/131694679