1.概要
春ブートアプリケーションの作成では、ためにJava Beanのプロパティマップを設定非常に便利です。しかし、それはこれらの属性を記録するための最良の方法は何ですか?
このチュートリアルでは、探求する春のブート構成のプロセッサおよび関連するメタデータファイルJSON、各プロパティのドキュメント、および他の制約のJSONの意味を。
2.構成メタデータ
開発者として、私たちが開発したアプリケーションのほとんどは、ある程度設定可能でなければなりません。しかし、通常の状況下では、私たちは本当にそれがデフォルト値を持っている、または古くなっているなど、設定パラメータの役割を理解していない、時には私たちも、財産の存在を知りません。
私たちに明確な根拠を支援するために、春のブート構成メタデータは、私たちのためにプロパティを使用する方法についての有用な情報を提供し、JSONファイルを生成しました。したがって、コンフィギュレーションは、対話型の構成プロパティのために必要な必要な情報を含む記述メタデータファイルです。
このドキュメントの真のメリットは、IDEはまた、私たちは春の自動構成属性と他の構成のヒントを完了するためにそれを読むことができます。
3.リライアンス
この構成メタデータを生成するために、我々は、使用するバネのブート・コンフィギュレーション・プロセッサに依存します。
だから、私たちは、依存関係に追加していきましょうオプションの依存関係を:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>2.1.7.RELEASE</version>
<optional>true</optional>
</dependency>
この依存関係は、プロジェクトがビルドされるときに呼び出さJavaアノテーションプロセッサをご提供します。私たちは、後でこれをより詳細に説明します。
防ぐために@ConfigurationProperties、私たちのプロジェクトを使用するために他のモジュールに使用されていないがMavenの中で依存関係を追加することで、オプションの依存性が最善のアプローチです。
4.例構成プロパティ
研究プロセッサは、現在の作業方法で、我々は、Java Beanを使用する必要が春ブートアプリケーションで取得したプロパティの数が含まれています。
@Configuration
@ConfigurationProperties(prefix = "database")
public class DatabaseProperties {
public static class Server {
private String ip;
private int port;
// standard getters and setters
}
private String username;
private String password;
private Server server;
// standard getters and setters
}
これを行うために、我々は使用することができます@ConfigurationPropertiesコメントを。プロセッサは、アノテーションを使用してコンフィギュレーション・クラスおよびメソッドをスキャン設定パラメータへのアクセスを設定し、メタデータを生成します。
のは、プロパティファイルにこれらのプロパティを追加してみましょう。この例では、ファイル名databaseproperties-test.propertiesを:
#Simple Properties
database.username=baeldung
database.password=password
我々はまた、我々は正しいことをしたことを確認するためのテストを追加します。
@RunWith(SpringRunner.class)
@SpringBootTest(classes = AnnotationProcessorApplication.class)
@TestPropertySource("classpath:databaseproperties-test.properties")
public class DatabasePropertiesIntegrationTest {
@Autowired
private DatabaseProperties databaseProperties;
@Test
public void whenSimplePropertyQueriedThenReturnsPropertyValue()
throws Exception {
Assert.assertEquals("Incorrectly bound Username property",
"baeldung", databaseProperties.getUsername());
Assert.assertEquals("Incorrectly bound Password property",
"password", databaseProperties.getPassword());
}
}
内部クラスを通じてサーバーにも入れ子になったプロパティ追加database.server.idとdatabase.server.portを。私たちは、クラスのサーバー内部の性質と彼の世代とgetterメソッドとsetterメソッドのサーバーを追加する必要があります。
我々のテストでは、我々は成功したセットを入れ子にして属性を読み取ることができることを確認するために簡単なチェックをみましょう:
@Test
public void whenNestedPropertyQueriedThenReturnsPropertyValue()
throws Exception {
Assert.assertEquals("Incorrectly bound Server IP nested property",
"127.0.0.1", databaseProperties.getServer().getIp());
Assert.assertEquals("Incorrectly bound Server Port nested property",
3306, databaseProperties.getServer().getPort());
}
さて、今私たちは、プロセッサを使用する準備が整いました。
メタデータ生成設定
我々は前に述べたように、プロセッサは、コンフィギュレーション・ファイルを生成します - それは、注釈プロセスを使用して実装されています。
プロジェクトがコンパイルされた後そう、私たちは、ディレクトリになります対象/クラス/ META-INFの下という名前のファイルを参照春な設定metadata.jsonのファイルを:
{
"groups": [
{
"name": "database",
"type": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties",
"sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties"
},
{
"name": "database.server",
"type": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties$Server",
"sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties",
"sourceMethod": "getServer()"
}
],
"properties": [
{
"name": "database.password",
"type": "java.lang.String",
"sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties"
},
{
"name": "database.server.ip",
"type": "java.lang.String",
"sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties$Server"
},
{
"name": "database.server.port",
"type": "java.lang.Integer",
"sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties$Server",
"defaultValue": 0
},
{
"name": "database.username",
"type": "java.lang.String",
"sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties"
}
],
"hints": []
}
次は、メタデータに影響を与えるのJava Beanの注釈を変更する方法を見てみましょう。
5.1メタデータの設定に関する追加情報に
まず第一に、してみましょうJavadocコメントが追加サーバー上。
第二に、私たちが与えてみましょうdatabase.server.portのフィールドのデフォルト値を、最後に追加@Minと@Maxノートを:
public static class Server {
/**
* The IP of the database server
*/
private String ip;
/**
* The Port of the database server.
* The Default value is 443.
* The allowed values are in the range 400-4000.
*/
@Min(400)
@Max(800)
private int port = 443;
// standard getters and setters
}
私たちが調べると、ばねの構成-metadata.jsonのファイルを、私たちは、この追加情報が反映されて表示されます。
{
"groups": [
{
"name": "database",
"type": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties",
"sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties"
},
{
"name": "database.server",
"type": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties$Server",
"sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties",
"sourceMethod": "getServer()"
}
],
"properties": [
{
"name": "database.password",
"type": "java.lang.String",
"sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties"
},
{
"name": "database.server.ip",
"type": "java.lang.String",
"description": "The IP of the database server",
"sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties$Server"
},
{
"name": "database.server.port",
"type": "java.lang.Integer",
"description": "The Port of the database server. The Default value is 443.
The allowed values are in the range 400-4000",
"sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties$Server",
"defaultValue": 443
},
{
"name": "database.username",
"type": "java.lang.String",
"sourceType": "com.baeldung.autoconfiguration.annotationprocessor.DatabaseProperties"
}
],
"hints": []
}
我々は見つけることができますdatabase.server.ipとdatabase.server.portがで異なる属性です。実際には、追加の情報は非常に有用です。IDE開発者や各属性の機能を理解しやすいです。
また、更新されたファイルを構築するためのトリガーを取得するようにしてください。あなたが選択した場合のEclipseでは、操作を保存し、その後、それぞれ、オプションを「自動的にビルド」ビルドをトリガーします。IntelliJのでは、我々は手動でビルドをトリガする必要があります。
5.2メタデータ形式を理解します
のは、よく見るとJSONメタデータファイルを見てみましょう、とその組成を議論します。
グループ値そのものを指定せずに他の特性へのパケットのために、より高いレベルのエントリ。私たちのケースでは、我々は持っているデータベースも接頭辞プロパティを設定されているグループを、。我々はまた、持っているデータベースのグループを、それが内部クラス経由でIPおよびポートグループとしての特性。
プロパティ値指定した項目を設定することができます。これらのプロパティは、接尾辞で構成された.propertiesファイルまたは私たちは、上記の例で見てきたように、そのようなデフォルト値と検証として、.yml *ファイルや追加情報を有していてもよいです。
ヒントは、ユーザーのプロパティ値によって設定された追加情報を支援します。例えば、我々は属性の許容値のセットを持っている場合、我々は、各プロパティの説明を提供することができます。これらのヒントは、IDEが自動的に選択するのに役立ちます。
構成メタデータの各コンポーネントは、独自の持っている属性を。詳細に設定プロパティの使用を説明するために。
6.まとめ
本稿では、関数春ブート構成のプロセッサを導入し、構成メタデータを作成します。このメタデータを使用することで、より簡単に設定パラメータと対話することができます。
我々は、メタデータ生成の構成、及びその形態及び組成の詳細な説明の一例を与えます。
ヘルプがありますどのように我々はまた、IDE上でオートコンプリートのサポートを参照してください。
いつものように、この資料に記載のすべてのコードスニペットは、上で利用可能な当社のGitHubリポジトリました。
オリジナルます。https://www.baeldung.com/spring-boot-configuration-metadata
作者:Dionisプリースト
翻訳:ロスト夜明け