依存関係の設定が面倒なので、エンタープライズアプリケーション用にSpringを設定するのは非常に面倒でエラーが発生しやすいタスクになりました。 これは、いくつかのサードパーティライブラリも使用するアプリケーションに特に当てはまります。
別のSpringベースのエンタープライズJavaアプリケーションを作成するたびに、同じルーチン手順を繰り返して構成する必要があります。
- 作成するアプリケーションのタイプ(Spring MVC、Spring JDBC、Spring ORMなど)に応じて、必要なSpringモジュールをインポートします
- Webコンテナライブラリのインポート(Webアプリケーション用)
- 指定されたバージョンのSpringと互換性のあるバージョンを探す必要がある一方で、必要なサードパーティライブラリ(Hibernate、Jacksonなど)をインポートします。
- データソース、トランザクション管理などのDAOコンポーネントを構成します。
- リソースマネージャー、ビューリゾルバーなどのWebレイヤーコンポーネントを構成する
- 必要なすべての構成をロードするクラスを定義します。
1. Spring Bootの紹介
Springの作者は、構成プロセスを自動化し、 Spring Bootと呼ばれるSpringアプリケーションの作成とデプロイのプロセスを高速化するユーティリティを開発者に提供することにしました。
Spring Bootは、Springベースのアプリケーションの作成を簡素化することを目的とする便利なプロジェクトです。 これにより、最も簡単な方法でWebアプリケーションを作成でき、開発者によるコードの構成と作成に最小限の労力しか必要ありません。
2.スプリングブートの機能
Spring Bootには優れた機能がありますが、最も重要な機能は、依存関係管理、自動構成、および組み込みサーブレットコンテナーです。
2.1。 簡単な依存関係管理
依存関係管理プロセスを高速化するために、Spring Bootは各タイプのSpringベースのアプリケーションに必要なサードパーティの依存関係を暗黙的にパックし、いわゆるスターターパッケージ(spring-boot-starter-web、spring-boot-starter-data-jpaなど)を通じて開発者に提供します.d。)
スターターパッケージは、アプリケーションに含めることができる便利な依存関係記述子のセットです。 これにより、Spring関連のすべてのテクノロジーに汎用的なソリューションが提供され、プログラマーが不必要にコード例を検索し、必要な依存関係記述子をロードする必要がなくなります(このような記述子とスターターパッケージの例を以下に示します)
たとえば、Spring Data JPAを使用してデータベースにアクセスする場合は、プロジェクトにspring-boot-starter-data-jpa依存関係を含めるだけで完了です(互換性のあるデータベースドライバーとHibernateライブラリを探す必要はありません)
Spring Webアプリケーションを作成する場合は、 spring-boot-starter-web依存関係を追加するだけです。これは、 spring-webmvc 、 jackson-json 、 validation-apiおよびTomcatなど、Spring MVCアプリケーションの開発に必要なすべてのライブラリをプロジェクトに取り込み ます。
言い換えれば、 Spring Bootはすべての一般的な依存関係を収集し、それらを1か所で定義するため、開発者は新しいアプリケーションを作成するたびにホイールを再発明するのではなく、それらを使用することができます
したがって、 Spring Bootを使用する場合、 pom.xmlファイルには、Springアプリケーションで使用する場合よりもはるかに少ない行が含まれます。
すべてのSpring Bootスターターパッケージのドキュメントを参照してください。
2.2。 自動設定
2番目の優れたSpring Boot機能は、自動アプリケーション構成です。
適切なスターターパッケージを選択すると、 Spring Bootは、追加したjar依存関係に基づいてSpringアプリケーションを自動的に構成しようとします
たとえば、 Spring-boot-starter-webを追加すると、Spring BootはDispatcherServlet 、 ResourceHandlers 、 MessageSourceなどの登録済みBeanを自動的に構成します
spring-boot-starter-jdbcを使用する場合、 Spring BootはDataSource 、 EntityManagerFactory 、 TransactionManager Beanを自動的に登録し、 application.propertiesファイルからデータベースに接続するための情報を読み取ります
データベースを使用せず、手動モードでの接続に関する詳細情報を提供しない場合、Spring Bootは、追加構成を行わずにメモリ内のデータベースを自動的に構成します(H2またはHSQLライブラリがある場合)
自動設定は、ユーザー設定でいつでも完全に再定義できます
2.3。 アプリケーションサーバーのネイティブサポート-サーブレットコンテナ
各Spring Boot Webアプリケーションには、Webサーバーが組み込まれています。 すぐに使用できるサーブレットコンテナのリストをご覧ください。
開発者は、サーブレットコンテナの構成とアプリケーションのデプロイについて心配する必要がなくなりました。 これで、組み込みサーバーを使用して実行可能なjarファイルとして、アプリケーションを単独で起動できます。
別のHTTPサーバーを使用する必要がある場合は、デフォルトの依存関係を除外してください。 Spring Bootは、HTTPサーバーごとに個別のスターターパッケージを提供します
組み込みサーバーでスタンドアロンWebアプリケーションを作成することは、開発に便利であるだけでなく、エンタープライズレベルのアプリケーションに受け入れられるソリューションであり、マイクロサービスの世界でますます有用になっています。 APIを提供するスタンドアロンで完全に展開可能なアーティファクトにサービス全体(ユーザー認証など)をすばやくパックする機能により、アプリケーションのインストールと展開がはるかに簡単になります。
3. Spring Bootのインストール要件
Spring Bootアプリケーションを構成して実行するには、次のものが必要です。
4. Spring Bootアプリケーションの作成
ここで、Spring Boot機能を使用して支払いを受け入れるための非常に簡単なREST APIを練習して実装しましょう。
4.1。 Mavenを使用してWebプロジェクトを作成する
使用しているIDEでMavenプロジェクトを作成し、SpringBootRestServiceと呼びます
Spring Bootは以前のバージョンでは動作しないため、必ずJava 8+バージョンを使用してください
4.2。 Pom.xmlの構成
2番目のステップは、 pom.xmlファイルでSpring Bootを構成することです
すべてのSpring Bootアプリケーションはspring-boot-starter-parentから構成されているため、依存関係をさらに定義する前に、 starter-parentを次のように追加します。
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.1.RELEASE</version> </parent>
なぜなら REST APIを作成しているため、 spring-boot-starter-webを依存関係として使用する必要があります。これは、 spring-core 、 spring-web 、 spring-webmvc 、 サーブレットapi 、およびjackson- databindライブラリなどの他のすべての依存関係を暗黙的に定義します。以下をpom.xmlに追加するだけです:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
これで、次のjarライブラリがプロジェクトに自動的にインポートされます。
次のステップは、Spring Bootプラグインを追加することです。
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
最後のステップは、アセンブリ時にMavenに実行可能なjarファイルを生成させることです。
<packaging>jar</packaging>
完全な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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>springboot.topjava.ru</groupId> <artifactId>SpringBootRestService</artifactId> <version>1.0</version> <packaging>jar</packaging> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.1.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
ご覧のとおり、1つの依存関係を使用して、完全に機能するWebアプリケーションを作成できます。
4.3。 RESTリソースの作成
次に、リクエストとレスポンス用のPOJOクラスとともに支払いコントローラーを作成します。
支払い要求のクラスを書きましょう:
package springboot.topjava.ru; public class PaymentRequest { private int userId; private String itemId; private double discount; public String getItemId() { return itemId; } public void setItemId(String itemId) { this.itemId = itemId; } public double getDiscount() { return discount; } public void setDiscount(double discount) { this.discount = discount; } public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } }
また、サービスによって返される基本的な応答を処理するクラス:
package springboot.topjava.ru; public class BaseResponse { private final String status; private final Integer code; public BaseResponse(String status, Integer code) { this.status = status; this.code = code; } public String getStatus() { return status; } public Integer getCode() { return code; } }
次に、コントローラーを作成します。
package springboot.topjava.ru; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/payment") public class PaymentController { private final String sharedKey = "SHARED_KEY"; private static final String SUCCESS_STATUS = "success"; private static final String ERROR_STATUS = "error"; private static final int CODE_SUCCESS = 100; private static final int AUTH_FAILURE = 102; @GetMapping public BaseResponse showStatus() { return new BaseResponse(SUCCESS_STATUS, 1); } @PostMapping("/pay") public BaseResponse pay(@RequestParam(value = "key") String key, @RequestBody PaymentRequest request) { final BaseResponse response; if (sharedKey.equalsIgnoreCase(key)) { int userId = request.getUserId(); String itemId = request.getItemId(); double discount = request.getDiscount();
4.4。 メインアプリケーションクラスの作成
この最後の手順は、構成クラスを作成し、アプリケーションを起動することです。 Spring Bootは、新しい@SpringBootApplicationアノテーションをサポートします。これは、デフォルトの属性で@ Configuration 、 @EnableAutoConfigurationおよび@ComponentScanを使用するのと同等です
したがって、 @SpringBootApplicationアノテーションが付けられたクラスを作成するだけで、Spring Bootは自動構成を有効にし、現在のパッケージ内のリソースをスキャンします。
package springboot.topjava.ru; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
5. Spring Bootアプリケーションの展開
では、Spring Bootの3番目の優れた機能、つまり組み込みサーバーを活用しましょう。 Mavenを使用して実行可能なjarファイルを作成し、通常のスタンドアロンアプリケーションのように実行するだけです。
- コマンドラインモード(cmdコマンド)を入力し、 pom.xmlのあるフォルダーに移動して、 mvn clean packageコマンドを入力します
- Mavenは、 SpringBootRestService-1.0.jarという実行可能jarファイルを生成します
- cdターゲットフォルダーに移動します
- 次に、jarファイルを実行します: java -jar SpringBootRestService-1.0.jar
- http:// localhost:8080 / paymentのブラウザに移動します
REST APIが実行されており、ポート8080を介してリクエストを処理する準備ができています(デフォルト)
この記事では、Spring Bootの機能を調べ、組み込みサーバーを使用して完全に機能する例を作成しました。
ソース:
https://dzone.com/articles/introducing-spring-boot
- Spring-boot-starter-parentはバージョンを1.5.8.RELEASEから2.1.1.RELEASEに変更し、それに応じてMavenがプルアップするライブラリのリストが更新されました
- Springリポジトリ宣言を削除し、中央リポジトリから依存関係をプルしました
- BaseResponseクラスでは、フィールドが最終的になり、コンストラクターが追加され、セッターが削除されました
- PaymentControllerでは、ブラウザーでアプリケーションをテストするために、@ GetMappingを使用してshowStatus()メソッドを導入しました
- メソッドの@RequestMappingを@ GetMapping / @ PostMappingに置き換えました
- コマンドラインからアプリケーションをデプロイするための変更も行われました
更新:
Lure_of_Chaosが指摘したように、今ではすべてがSPRING INITIALIZRを介して自動的に実行できます。 そして、お気に入りのJetBrains IntelliJ IDEAを離れることなく 。