Spring Bootの概要:Javaで簡単なREST APIを作成する







依存関係の設定が面倒なので、エンタープライズアプリケーション用にSpringを設定するのは非常に面倒でエラーが発生しやすいタスクになりました。 これは、いくつかのサードパーティライブラリも使用するアプリケーションに特に当てはまります。







別のSpringベースのエンタープライズJavaアプリケーションを作成するたびに、同じルーチン手順を繰り返して構成する必要があります。









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-webmvcjackson-jsonvalidation-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はDispatcherServletResourceHandlersMessageSourceなどの登録済みBeanを自動的に構成します







spring-boot-starter-jdbcを使用する場合、 Spring BootDataSourceEntityManagerFactoryTransactionManager 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-corespring-webspring-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(); // Process the request // .... // Return success response to the client. response = new BaseResponse(SUCCESS_STATUS, CODE_SUCCESS); } else { response = new BaseResponse(ERROR_STATUS, AUTH_FAILURE); } return response; } }
      
      





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ファイルを作成し、通常のスタンドアロンアプリケーションのように実行するだけです。









REST APIが実行されており、ポート8080を介してリクエストを処理する準備ができています(デフォルト)







この記事では、Spring Bootの機能を調べ、組み込みサーバーを使用して完全に機能する例を作成しました。







ソース:

https://dzone.com/articles/introducing-spring-boot







翻訳では、情報が更新されました。





更新:



Lure_of_Chaosが指摘したように、今ではすべてがSPRING INITIALIZRを介して自動的に実行できます。 そして、お気に入りのJetBrains IntelliJ IDEAを離れることなく








All Articles