[Spring Boot] Spring Boot システム構成 - カスタム構成項目

カスタム構成項目

このセクションでは、Spring Boot がカスタム構成項目 (構成プロパティとも呼ばれます) を実装する方法について説明します。プロジェクトの開発過程では、システム業務の設定ファイルや設定項目をカスタマイズする必要が生じることが多いですが、Spring Bootではカスタムプロパティの設定をどのように実装しているのでしょうか?実際、これは非常に簡単で、Spring Boot では、 **@Value アノテーション**、 @ConfigurationProperties アノテーションEnvironment インターフェイスなど、構成項目をカスタマイズする 3 つの方法が提供されています。

1.@値

実際のプロジェクトでは、設定ファイルに簡単な設定項目を定義する必要があることが多いですが、Spring Boot では簡単な設定項目を設定するための @Value アノテーションが用意されており、デフォルトで application.properties ファイルの設定プロパティを読み込みます。次の例は、@Value アノテーションを使用してカスタム構成項目を追加する方法を示しています。

まず、application.properties 構成ファイルにカスタム構成項目を追加します。

com.lxmb.costum.firstname=Zhang
com.lxmb.costum.secondname=Weiz

上の例では、firstname と Secondname という 2 つのカスタム構成項目を追加しました。次に、使用する場所で @Value アノテーションを呼び出して、構成アイテムの値を取得します。

@Value("${com.lxmb.costum.firstname]")
private String firstName;
@Value("${com.lxmb.costum.secondname]")
private String secondName;

上記の例では、構成ファイル内の対応する構成項目の値が @Value アノテーションを通じて取得されます。

注意しなければならないことは次のとおりです。

1) @Value アノテーションを使用する場合、クラスは Spring コンテナーによって管理される必要があります。つまり、@Component、@Controller、@Service およびその他のアノテーションを使用して定義されたクラスです。

2) @Value は、完全な構成アイテムのキー値を渡す必要があります。

3) @Value アノテーションは、デフォルトで application.properties 構成ファイルを読み取ります。他の構成ファイルを使用する必要がある場合は、@PropertySource アノテーションを通じて対応する構成ファイルを指定できます。

2. 環境インターフェース

環境は Spring が実行環境のために提供する高度に抽象的なインターフェイスであり、コマンド ライン パラメーター、システム プロパティ、システム環境、乱数、構成ファイルなど、システムによってロードされるすべての構成アイテムを自動的に取得します。これを使用するときに他の追加の設定は必要なく、使用するクラスに環境を注入するだけです。次の例は、Environment がシステム定義の構成項目を読み取ることを示しています。

まず、application.properties 構成ファイルに次の構成項目を追加します。

com.lxmb.costum.firstname=Zhang
com.lxmb.costum.secondname=Weiz

上記の例では、application.properties で 2 つのカスタム構成項目 (firstname と Secondname) を構成しました。環境はシステム内のすべての構成を読み取ります。application.properties でカスタム構成項目を設定できるだけでなく、カスタム構成ファイルに構成項目を追加することもできます。次に、単体テスト メソッドを作成し、環境を挿入してシステム構成を読み取ります。サンプルコードは次のとおりです。

@Autowired
private Environment env;

@Test
void getEnv() {
    
    
	System.out.printIn(env.getProperty("com.lxmb.costum.firstname"));
	System.out.println(env.getProperty("com.lxmb.costum.secondname"));
}

上記はEnvironmentで使用するサンプルコードですが、非常にシンプルです。ただし、Environment を使用する場合は、次の 2 つの点に注意する必要があります。

1) 環境を使用するために構成ファイルを指定する必要はありません。環境によって取得されるのは、システムによってロードされたすべての構成ファイル内の構成項目です。

2) 設定ファイルのエンコード形式に注意してください。デフォルトは ISO8859-1 です。

3. @ConfigurationProperties アノテーション

実際のプロジェクト開発において、注入する必要がある設定項目が多い場合、上記の@valueメソッドやEnvironmentメソッドは煩雑になります。このとき、@ConfigurationProperties アノテーションを使用して、構成項目をエンティティ Bean に関連付け、構成項目とエンティティ クラス フィールド間の関連付けを実現し、構成ファイル データを読み取ることができます。次の例は、@ConfigurationProperties アノテーションが構成ファイルを読み取る方法を示しています。

3.1 カスタム構成ファイルの作成

リソースの下にカスタムの website.properties 構成ファイルを作成します。サンプル コードは次のとおりです。

com.lxmb.resource.name=weiz
com.lxmb.resource.website=www.lxmb.com
com.lxmb.resource.language=java

上の例では、カスタムの website.properties 構成ファイルが作成されました。名前、Web サイト、言語の 3 つの設定項目が追加されました。これらの設定項目の名前のプレフィックスは com.lxmb.resource です。

3.2 エンティティクラスの作成

WebSiteProperties カスタム構成オブジェクト クラスを作成し、@ConfigurationProperties アノテーションを使用して、構成ファイル内の構成項目をカスタム構成オブジェクト クラスに挿入します。サンプル コードは次のとおりです。

@Configuration
@ConfigurationProperties(prefix= "com.lxmb.resource")
@PropertySource(value = "classpath:website.properties")
public class WebSiteProperties {
    
    
	private String name;
	private String website;
	private String language;
	
	public String getName() (
		return name;
	}
	public void setName(String name) {
    
    
		this.name = name;
	}
	public String getWebsite() {
    
    
		return website;
	}
	public void setWebsite(String website) [
		this.website = website;
	}
	public String getLanguage() {
    
    
		return language;
	}
	public void setLanguage(String language) {
    
    
		this.language = language;
	}
}

上記のサンプル コードからわかるように、@Configuration アノテーション、@ConfigurationProperties、@PropertySource の 3 つのアノテーションを使用して、WebSiteProperties エンティティ クラスを定義します。

1) @Configuration は、Bean 定義を構築し、Spring コンテナーに初期化するための構成クラスとしてこのクラスを定義します。

2) @ConfigurationProperties(prefix = "com.lxmb.resource") は構成項目をバインドします。ここで、prefix はバインドされた構成項目名の接頭辞を表します。

3) @PropertySource(value = "classpath:website.properties") は、読み取り構成ファイルとそのパスを指定します。@PropertySource は YML ファイルのインポートをサポートしていません。対応するすべての構成項目は、上記の WebSiteProperties クラスを通じて読み取ることができます。

3.3 通話設定項目

エンティティ クラスを構成するメソッドの使用も非常に簡単で、使用する必要があるクラスに WebSiteProperties を挿入するだけです。サンプル コードは次のとおりです。

@Autowired
private WebSiteProperties website;

@Test
void getProperties() {
    
    
	System.out.printIn(website.getName());
	System.out.println(website.getWebsite());
	System.out.printIn(website.getLanguage());
}

3.4 設定ファイル使用時の注意事項

実際のプロジェクトでは、設定ファイルを読み取るためのアプリケーション シナリオが数多く発生します。そのため、さまざまな落とし穴に注意する必要があります。そうしないと、非常に悲しいことになります。この目的を達成するために、構成ファイルを使用するときに注意すべき点をいくつかまとめます。

1) YML ファイルを使用する場合は、スペースとインデントの形式に注意してください。

2) プロパティ ファイルはデフォルトで ISO8859-1 エンコード形式を使用しますが、これは文字化けが発生しやすいです。中国語が含まれる場合は、spring.http.encoding.charset=UTF-8 設定を追加します。

3) プロパティ設定は YML ファイルよりも優先されます。YML ファイルはプロパティ ファイルよりも前にロードされるため、2 つのファイルの構成が同じである場合、後でロードされるプロパティの構成によって前の YML の構成が上書きされます。

4) @PropertySource アノテーションは、デフォルトではプロパティ ファイルのみをロードします。YML ファイルはこのアノテーションを使用できません。

5) 単純な値には @Value を使用し、複雑なオブジェクトには @ConfigurationProperties を使用することをお勧めします。

6) コンテナが提供する各種メソッドを利用できるのはSpringコンテナ内のコンポーネントのみであるため、設定読み込みクラスにはSpringコンテナに追加する @Component アノテーションを追加する必要がある。

おすすめ

転載: blog.csdn.net/weixin_45627039/article/details/131701168