春ブーツアクチュエータは、RESTfulなWebアプリケーションを構築する使用します

 

春ブーツアクチュエータは  春ブーツのサブプロジェクトです。それを介して、それが簡単に生産レベルの様々なサービスにも適用することができます。このチュートリアルでは、これらのサービスを追加する方法を学習してアプリケーションを構築します。

1.あなたが構築するために必要なもの

このチュートリアルでは、ブートアクチュエータに春使用しての「Hello World」を作成するために行くことができます  RESTfulなWebサービスをあなたは、HTTPのGETリクエストサービスを構築する必要があります。

$ curl http://localhost:9000/hello-world
复制代码

以下の戻り値  JSONは

{"id":1,"content":"Hello, World!"}
复制代码

彼らはまた、環境管理サービスでは、使用する準備ができて、箱から出して、アプリケーションに多くのことを追加して製造することができる(または他の)機能。あなたは、そのビジネス機能をサービスを構築し、  RESTfulなWebアプリケーションの構築  チュートリアルの結果と一致します。比較は面白いかもしれませんが、このチュートリアルを学び、習得する必要はありませんが。

1.1。あなたが準備する必要がありますどのような

2.このチュートリアルを完了する方法

一番好きな  春のはじめ  のように、あなたがゼロから始めることができ、各段階の完了は、あなたが基本的な設定リンクですでにおなじみスキップすることができます。とにかく、最終的にはコードが正しく動作するでしょう。

当初から、会場と  のGradleを使用して構築する  セクションを

基本的なリンクをスキップし、次の手順を実行します。

  • ダウンロード  して解凍、このチュートリアルのソースコードを、または  Gitの  クローンについて: git clone https://github.com/spring-guides/gs-actuator-service.git
  • 入力し  gs-actuator-service/initial たディレクトリを
  • 前方へスキップ  パフォーマンスクラスの作成  セクションを

完了後、係る  gs-actuator-service/complete チェックの結果コードディレクトリに。

3. Gradleのビルド

まず、基本的なビルドスクリプトを設定します。春を使用してアプリケーションを構築する場合、あなたがプログラムを構築したいものは何でも使用することができます。ここに含まれているコードがで必要とされる  のGradle  または  Mavenの  実行します。あなたがそれらに精通していない場合は、参照  を使用するのGradleは、Javaプロジェクトをビルドする  か、  MavenのJavaプロジェクトで構築されました

3.1。ディレクトリ構造を作成します

作業ディレクトリに、以下に示すサブディレクトリ構造を作成する;例えば、UNIXのようなシステムでは、使用  mkdir -p src/main/java/hello 作成するコマンド。

└── src
    └── main
        └── java
            └── hello
复制代码

3.2。Gradleでは、スクリプトを構築作成

以下は、  初期化するためのスクリプトを構築するのGradle

build.gradle
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:2.1.6.RELEASE")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot' apply plugin: 'io.spring.dependency-management' bootJar { baseName = 'gs-actuator-service' version = '0.1.0' } sourceCompatibility = 1.8 targetCompatibility = 1.8 repositories { mavenCentral() } dependencies { compile("org.springframework.boot:spring-boot-starter-web") compile("org.springframework.boot:spring-boot-starter-actuator") testCompile("org.springframework.boot:spring-boot-starter-test") testCompile("junit:junit") } 复制代码

春ブーツのGradleプラグインは  、多くの便利な機能を提供します。

  • 一緒にクラスパスの下に依存するすべてのjarパッケージを持ち込み、そしてあなたが実行できるようにすると輸送サービスをより便利になり、実行可能モノマー「ユーバージャー」を構築。
  • 検索  public static void main() クラスメソッドがあり、かつ実行可能なクラスとしてそれをマークしています。
  • 内蔵の提供  春ブーツ依存  コレクションのバージョン番号と一致するように、依存関係のリゾルバを。あなたはそれが選択したコレクション春ブートバージョン番号にデフォルト値を任意のバージョンを書き換えることができますが。

4. Mavenので構築されました

まず、基本的なビルドスクリプトを設定します。春を使用してアプリケーションを構築する場合、あなたがプログラムを構築したいものは何でも使用することができます。ここに含まれているコードがで必要とされる  のMaven  実行します。あなたはそれに慣れていない場合は、参照  のMaven Javaプロジェクトで構築されました

4.1。ディレクトリ構造を作成します

作業ディレクトリに、以下に示すサブディレクトリ構造を作成する;例えば、UNIXのようなシステムでは、使用  mkdir -p src/main/java/hello 作成するコマンド。

└── src
    └── main
        └── java
            └── hello
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> <groupId>org.springframework</groupId> <artifactId>gs-actuator-service</artifactId> <version>0.1.0</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.6.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <properties> <java.version>1.8</java.version> </properties> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> 复制代码

春ブーツMavenプラグインは  、多くの便利な機能を提供します。

  • 一緒にクラスパスの下に依存するすべてのjarパッケージを持ち込み、および実装を行い、あなたのサービスをより便利に転送する実行可能モノマー「ユーバージャー」を構築。
  • 検索  public static void main() クラスメソッドがあり、かつ実行可能なクラスとしてそれをマークしています。
  • 内蔵の提供  春ブーツ依存  コレクションのバージョン番号と一致するように、依存関係のリゾルバを。あなたはそれが選択したコレクション春ブートバージョン番号にデフォルト値を任意のバージョンを書き換えることができますが。

5.建設IDE

6.ファイル名を指定して実行空のサービス

手始めに、ここに空白のSpring MVCアプリケーションです。

src/main/java/hello/HelloWorldApplication.java
package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloWorldApplication {

    public static void main(String[] args) {
        SpringApplication.run(HelloWorldApplication.class, args);
    }

}
复制代码

@SpringBootApplication ノートは、あなたのクラスパスやその他のコンテンツの内容によっては、当然のことながら、(そのような埋め込まれたサーブレット・コンテナなど)いくつかのデフォルト値を提供しています。それと同時に、また、春のMVCオープンし  @EnableWebMvc たWebエンドポイントをアクティブにするために注釈を。

プログラムは、任意のエンドポイントを定義していませんが、それはアップしていると十分な機能アクチュエータの一部を観察します。 SpringApplication.run() このコマンドは、Webアプリケーションを起動する方法を知っています。のみ、このコマンドを実行する必要があります。

$ ./gradlew clean build && java -jar build/libs/gs-actuator-service-0.1.0.jar
复制代码

あなたは、ほぼ、何が起こるかの結果を任意のコードを書いていませんか?良いスタートと他のサービスの後、テストのために別の端末のターミナルを開きます。

$ curl localhost:8080
{"timestamp":1384788106983,"error":"Not Found","status":404,"message":""}
复制代码

サーバが稼働している、とあなたは、任意のサービスのエンドポイントを定義していませんでした。あなたは、アクチュエータから見ることができます  /error ではなく生成されるデフォルトのコンテナHTMLエラー応答よりも、一般的なJSONレスポンスエンドポイント。あなたは、ボックスの外に露出端れるコンソールログサービスが開始さで見ることができます。例えば:

$ curl localhost:8080/actuator/health
{"status":"UP"}
复制代码

良い、サービスはすでに「UP」です。

見る  春ブーツアクチュエータプロジェクトの  詳細については。

7.パフォーマンスクラスを作成します。

まず、あなたのAPIのようになりますことを検討してください。

あなたは対処したい  /hello-world GET要求は、名前のクエリパラメータを使用することができるとき。そのような要求に応答して、あなたが挨拶を表し、次のJSONに戻ります。

{
    "id": 1,
    "content": "Hello, World!"
}
复制代码

id フィールドは、一意の識別子の挨拶で、content フィールドには、挨拶のテキスト表現です。

挨拶のモデリングを表すクラスを作成します。

src/main/java/hello/Greeting.java
package hello;

public class Greeting {

    private final long id;
    private final String content;

    public Greeting(long id, String content) {
        this.id = id;
        this.content = content;
    }

    public long getId() {
        return id;
    }

    public String getContent() { return content; } } 复制代码

さて、あなたは、このようなサービスのパフォーマンスのためのコントローラのエンドポイントを作成することができます。

8.リソースコントローラを作成します。

春では、RESTエンドポイントは、Spring MVCコントローラです。次のSpring MVCコントローラは、ハンドル  /hello-world GETリクエストとリターン  Greeting リソースを:

src/main/java/hello/HelloWorldController.java
package hello;

import java.util.concurrent.atomic.AtomicLong;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloWorldController {

    private static final String template = "Hello, %s!";
    private final AtomicLong counter = new AtomicLong();

    @GetMapping("/hello-world")
    @ResponseBody
    public Greeting sayHello(@RequestParam(name="name", required=false, defaultValue="Stranger") String name) { return new Greeting(counter.incrementAndGet(), String.format(template, name)); } } 复制代码

ユーザ指向のRESTエンドポイントコントローラとコントローラとの間の主な違いは、応答を作成する方法です。コントローラは、HTMLをレンダリングするために端面図(例えば、JSP)モデルデータに依存しない、単にデータを直接バック応答の本体に書き込まれます。

@ResponseBody 注釈は、Spring MVCのモデルを表示する表示されませんが、書かれたレスポンスボディを返すために、オブジェクトう指示します。このステップレンダリングスプリング・メッセージは、コンバータを介して達成されます。ジャクソン2は、これがあればということを意味し、クラスパスにあった  Accept リクエストヘッダの指定がJSONを返す必要があり、MappingJackson2HttpMessageConverter JSONへの挨拶の間の変換を処理します。

どのように私はクラスパスそれにジャクソン2知っているのですか?操作  mvn dependency:tree や  ./gradlew dependencues コマンドは、詳細な依存関係ツリーを取得し、ジャクソン2.xのを表示します あなたはからそれを見ることができる  春ブーツ・スターター-JSONで、  春・ブート・スターター・ウェブ  依存性インポート。

9.実行可能なメインクラスを作成します。

カスタムメインクラスからアプリケーションを起動することができ、または直接これを行うために、1つのクラスから構成されていてもよいです。最も簡単な方法は、使用することです  SpringApplication ヘルパークラスを:

src/main/java/hello/HelloWorldApplication.java
package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloWorldApplication {

    public static void main(String[] args) {
        SpringApplication.run(HelloWorldApplication.class, args);
    }

}
复制代码

伝統的な春のMVCアプリケーションでは、追加する必要が  @EnableWebMvc ノートには、開くこと  DispatcherServletを含め、主要な機能を。春ブーツ春-webmvcはクラスパスで検出された場合、それは自動的に注釈を開きます。これは、あなたが次のステップでより簡単にコントローラを構築することができます。

@SpringBootApplication また、導入し  @ComponentSacn た注釈春スキャン伝えるための  hello パッケージを、それらのコントローラを読み込む(だけでなく、他の人をしている注釈付きコンポーネントクラスをマークされています)。

10.実行可能JARを構築

あなたが必要な依存、実行可能なJARパッケージのクラスおよびリソース・ファイルが含まを構築して実行することができ、GradleのやMaven、コマンドラインからアプリケーションを実行することができます。これは、開発ライフサイクル、異なる環境間で、アプリケーションの公開、バージョンと展開全体が容易になります。

あなたはGradleのを使用している場合は、することができ  ./gradlew bootRun 、アプリケーションを起動し、また可能  ./gradlew buildJARパッケージを構築し、次のコマンドを介して実行します:

java -jar build/libs/gs-actuator-service-0.1.0.jar
复制代码

あなたはMavenの缶を使用している場合は  ./mvnw spring-boot:run 、アプリケーションを起動するために、また、可能  ./mvnw clean package JARパッケージを構築し、次のコマンドを介して実行します:

java -jar target/gs-actuator-service-0.1.0.jar
复制代码

どちらの方法はあなたにもできる、実行可能なJARパッケージを作成する  古典的なWARパッケージをビルドします

... service comes up ...
复制代码

テスト:

$ curl localhost:8080/hello-world
{"id":1,"content":"Hello, Stranger!"}
复制代码

別のポートへの切り替え11

春ブーツアクチュエータを追加することにより、ポート8080でデフォルトで実行さ  application.properties フィギュレーションファイルを上書きすることができます。

src/main/resources/application.properties
server.port: 9000
management.server.port: 9001
management.server.address: 127.0.0.1
复制代码

アプリケーションを再起動します。

$ ./gradlew clean build && java -jar build/libs/gs-actuator-service-0.1.0.jar

... service comes up on port 9000 ...
复制代码

テスト:

$ curl localhost:8080/hello-world
curl: (52) Empty reply from server
$ curl localhost:9000/hello-world
{"id":1,"content":"Hello, Stranger!"}
$ curl localhost:9001/actuator/health {"status":"UP"} 复制代码

12.テストアプリケーション

単位アプリケーションが正しく実行できるかどうかをチェックするためには、アプリケーション/統合テストクラスを記述する必要があります。テストケースは、以下を参照することができます:

  • コントローラが正常です
  • エンドポイント管理は正常です

テストクラスで見てきたように、我々は、ランダムなポートでアプリケーションを起動します。

src/test/java/hello/HelloWorldApplicationTests.java
/*
 * Copyright 2012-2014 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package hello; import java.util.Map; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.client.TestRestTemplate; import org.springframework.boot.web.server.LocalServerPort; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringRunner; import static org.assertj.core.api.BDDAssertions.then; /** * Basic integration tests for service demo application. * * @author Dave Syer */ @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @TestPropertySource(properties = {"management.port=0"}) public class HelloWorldApplicationTests { @LocalServerPort private int port; @Value("${local.management.port}") private int mgt; @Autowired private TestRestTemplate testRestTemplate; @Test public void shouldReturn200WhenSendingRequestToController() throws Exception { @SuppressWarnings("rawtypes") ResponseEntity<Map> entity = this.testRestTemplate.getForEntity( "http://localhost:" + this.port + "/hello-world", Map.class); then(entity.getStatusCode()).isEqualTo(HttpStatus.OK); } @Test public void shouldReturn200WhenSendingRequestToManagementEndpoint() throws Exception { @SuppressWarnings("rawtypes") ResponseEntity<Map> entity = this.testRestTemplate.getForEntity( "http://localhost:" + this.mgt + "/actuator/info", Map.class); then(entity.getStatusCode()).isEqualTo(HttpStatus.OK); } } 复制代码

13.概要

おめでとう、あなたは春には、単純なRESTfulなサービスを開発している使用されています。春ブーツアクチュエータので、あなたはいくつかの有用な組み込みサービスを追加します。

14.リファレンス

以下のチュートリアルでは、あなたに役立つかもしれません。

新しいチュートリアルでは、既存またはチュートリアルに最適です書きたいですか?私たちを参照してください  貢献ガイドラインを

すべてのチュートリアルが公開されているコードは、テキストを提供する、ASLv2ライセンス契約を提供  BY-ND CC 3.0  ライセンス。


オリジナル:spring.io/guides/gs/a ...

著者:spring.io

翻訳:ワンは欲しかったです

 

おすすめ

転載: www.cnblogs.com/liululee/p/11118573.html