プロパティはapplication.yml
にあるapplication.properties
ではなくsrc/main/resources/
ファイルから読み込まれるスプリングブートアプリケーションを使用しています。
config:
Host: localhost:8080
server: 123
そして、彼らはこのような.Java
ファイルに引っ張られています
@ConfigurationProperties( prefix="config")
public class ConnectionImpl implements Connection{
@Value("${config.Host}")
private Stringhost;
}
この方法でプロパティを取得できます。ただし、設定プロパティをapplication.yml
から別の場所にある別の.yml
ファイルに移動しようとしています。 (src/main/resources/env-config
)。
現在、同じ方法で、つまり@Value
アノテーションを使用してプロパティを取得できません。追加する必要がある他の注釈はありますか?
ドキュメント から:
SpringApplication
は、次の場所にあるapplication.properties
(またはapplication.yml
)ファイルからプロパティをロードし、SpringEnvironment
に追加します。
- 現在のディレクトリの
/config
サブディレクトリ。- 現在のディレクトリ
- クラスパス
/config
パッケージ- クラスパスルート
構成ファイル名として
application.properties
を使用したくない場合は、spring.config.name環境プロパティを指定して別の名前に切り替えることができます。spring.config.location
環境プロパティ(ディレクトリの場所またはファイルパスのカンマ区切りリスト)を使用して、明示的な場所を参照することもできます。
classpath:,classpath:/config,file:,file:config/
の値に関係なく、デフォルトの検索パスspring.config.location
が常に使用されます。この検索パスは、優先順位の低いものから高いものへと並べられています(file:config/
優先)。独自の場所を指定する場合、それらはすべてのデフォルトの場所よりも優先され、同じ最低から最高の優先順位を使用します。このようにして、アプリケーションのデフォルト値をapplication.properties
(またはspring.config.name
で選択した他のベース名)に設定し、デフォルトを保持しながら、実行時に別のファイルでオーバーライドできます。
SpringApplication
に具体的に調べる場所を指示するコマンドライン引数を指定する必要があります。 resources/
のすべてがクラスパスのルートに追加されると、コマンドラインは次のようになります。
Java -jar myproject.jar --Dspring.config.location=classpath:/env-config/service-config.yml
application.yml
の下に一般的なresources/
がある場合、その中のプロパティは引き続き読み込まれますが、コマンドラインで指定されたプロパティファイルよりも優先されます。
あなたの質問はあなたが何をするつもりなのかを実際に言っていませんが、異なる環境(例えばdevelopment
、test
、production
)に異なる設定をしたい場合は、そのための簡単なソリューションです。
プロジェクト内の次のようなファイル階層に構成ファイルを配置します。
src/
main/
resources/
application.yml
application-development.yml
application-test.yml
application-production.yml
アプリケーションを起動すると
Java -jar mySpringApplication.jar -Dspring.profiles.active=development
application.yml
の設定は「ベースレイヤー」として扱われ、application-development.yml
の設定によって上書きされます。これにより、application.yml
のすべての環境に「デフォルト」設定を、application-ENV.yml
ファイルに環境固有の構成を設定できます。同じことがtest
とproduction
でも機能します。
番号。
コードベース内でそのようなファイルパスをハードコーディングしないようにすると、はるかに良い位置になります。 @ConfigurationProperties
には以前はlocations
属性がありましたが、1.5で廃止され、すでに削除されています。
Spring Bootでは、Environment
を構成します。これは、構成の唯一の信頼できる情報源です。コードに設定を埋め込むのではなく、必要なファイルを読み取るようにSpring Bootを構成する必要があります。 spring.config.location
。これをより透過的な方法で実行したい場合は、おそらく EnvironmentPostProcessor
が必要です