アノテーションインターフェース PropertySource
PropertySource を Spring の Environment に追加するための便利で宣言的なメカニズムを提供するアノテーション。@Configuration クラスと組み合わせて使用します。使用例
キー / 値ペア testbean.name=myTestBean を含むファイル app.properties を指定すると、次の @Configuration クラスは @PropertySource を使用して app.properties を Environment の PropertySources のセットに提供します。
@Configuration
@PropertySource("classpath:/com/myco/app.properties")
public class AppConfig {
@Autowired
Environment env;
@Bean
public TestBean testBean() {
TestBean testBean = new TestBean();
testBean.setName(env.getProperty("testbean.name"));
return testBean;
}
}Environment オブジェクトは構成クラスに @Autowired として追加され、TestBean オブジェクトを設定するときに使用されることに注意してください。上記の構成では、testBean.getName() を呼び出すと "myTestBean" が返されます。
<bean> および @Value アノテーションの ${...} プレースホルダーの解決
PropertySource のプロパティを使用して <bean> 定義または @Value アノテーションの ${...} プレースホルダーを解決するには、適切なエンベディッドバリューリゾルバーが ApplicationContext で使用される BeanFactory に登録されていることを確認する必要があります。これは、XML で <context:property-placeholder> を使用すると自動的に発生します。@Configuration クラスを使用する場合、これは、static @Bean メソッドを介して PropertySourcesPlaceholderConfigurer を明示的に登録することで実現できます。ただし、static @Bean メソッドを介した PropertySourcesPlaceholderConfigurer の明示的な登録は、通常、プレースホルダー構文などの設定をカスタマイズする必要がある場合にのみ必要であることに注意してください。@Configuration の javadoc の「外部化された値の操作」セクションおよび「 詳細と例については、@Bean の javadoc の「 @Bean メソッドを返す BeanFactoryPostProcessor」に関する注記を参照してください。
@PropertySource リソースロケーション内の ${...} プレースホルダーの解決
@PropertySource リソースの場所に存在する ${...} プレースホルダーは、環境に対してすでに登録されているプロパティソースのセットに対して解決されます。例:
@Configuration
@PropertySource("classpath:/com/${my.placeholder:default/path}/app.properties")
public class AppConfig {
@Autowired
Environment env;
@Bean
public TestBean testBean() {
TestBean testBean = new TestBean();
testBean.setName(env.getProperty("testbean.name"));
return testBean;
}
}"my.placeholder" がすでに登録されているプロパティソースの 1 つに存在すると仮定します。たとえば、システムプロパティや環境変数 - プレースホルダーは対応する値に解決されます。そうでない場合は、"default/path" がデフォルトとして使用されます。デフォルト値(コロン ":" で区切られる)の表現はオプションです。デフォルトが指定されておらず、プロパティを解決できない場合、 IllegalArgumentException がスローされます。
@PropertySource でオーバーライドするプロパティに関する注意
特定のプロパティキーが複数のプロパティリソースファイルに存在する場合、最後に処理された @PropertySource アノテーションが「優先」され、同じ名前の以前のキーが上書きされます。
例: 2 つのプロパティファイル a.properties および b.properties が与えられた場合、@PropertySource アノテーションで参照する次の 2 つの構成クラスを検討してください。
@Configuration
@PropertySource("classpath:/com/myco/a.properties")
public class ConfigA { }
@Configuration
@PropertySource("classpath:/com/myco/b.properties")
public class ConfigB { }
オーバーライドの順序は、これらのクラスがアプリケーションコンテキストに登録される順序によって異なります。
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.register(ConfigA.class); ctx.register(ConfigB.class); ctx.refresh();
上記のシナリオでは、ConfigB が最後に登録されたため、b.properties のプロパティは a.properties に存在する重複をオーバーライドします。
特定の状況では、@PropertySource アノテーションを使用するときにプロパティソースの順序を厳密に制御することが不可能または実用的でない場合があります。例: 上記の @Configuration クラスがコンポーネントスキャンによって登録された場合、順序を予測することは困難です。そのような場合 — 上書きが重要な場合 — ユーザーがプログラムによる PropertySource API の使用にフォールバックすることをお勧めします。詳細については、ConfigurableEnvironment および MutablePropertySources javadoc を参照してください。
@PropertySource は反復可能なSEアノテーションとして使用できます。@PropertySource は、属性オーバーライドを持つカスタム合成アノテーションを作成するためのメタアノテーションとしても使用できます。
- 導入:
- 3.1
- 作成者:
- Chris Beams, Juergen Hoeller, Phillip Webb, Sam Brannen
- 関連事項:
必須定数のサマリー
必須要素オプション要素の概要
オプション要素修飾子と型オプションの要素説明指定されたリソースの特定の文字エンコーディング (例: "UTF-8" )。ClassSE<? extends PropertySourceFactory>カスタムPropertySourceFactoryを指定します(ある場合)。booleanproperty resourceの検索の失敗を無視する必要があるかどうかを示します。このプロパティソースの一意の名前を示します。
要素の詳細
value
StringSE[] valueロードするプロパティファイルのリソースの場所を指定します。デフォルトの
factoryは、従来のプロパティファイル形式と XML ベースのプロパティファイル形式の両方をサポートしています。たとえば、"classpath:/com/myco/app.properties"または"file:/path/to/file.xml"です。Spring Framework 6.1 以降、リソースの場所のワイルドカードもサポートされています。たとえば、
"classpath*:/config/*.properties"。${...}プレースホルダーは、すでにEnvironmentに登録されているプロパティソースに対して解決されます。例については上記を参照してください。各場所は、宣言された順序 (または、場所のワイルドカードが使用されている場合はリソースの場所が解決される順序) で、それを囲む
Environmentに独自のプロパティソースとして追加されます。
name
StringSE nameこのプロパティソースの一意の名前を示します。省略した場合、
factory()は基になるリソースに基づいて名前を生成します (DefaultPropertySourceFactoryの場合: 対応する名前のないResourcePropertySourceコンストラクターを通じてリソースの説明から派生します)。PropertySourceの名前には 2 つの一般的な目的があります。- 診断: ログ記録とデバッグでプロパティのソースを特定するため - たとえば、Spring Boot の
PropertySourceOriginを介した Spring Boot アプリケーション内です。 MutablePropertySourcesとのプログラムによる対話: 名前を使用して、特定のプロパティソースからプロパティを取得する (または、特定の名前付きプロパティソースがすでに存在するかどうかを判断する) ことができます。この名前を使用して、既存のプロパティソースに関連する新しいプロパティソースを追加することもできます (addBefore()およびaddAfter()を参照)。
- デフォルト:
- ""
- 診断: ログ記録とデバッグでプロパティのソースを特定するため - たとえば、Spring Boot の
ignoreResourceNotFound
boolean ignoreResourceNotFound- 導入:
- 4.0
- デフォルト:
- false
encoding
StringSE encoding指定されたリソースの特定の文字エンコーディング (例: "UTF-8" )。- 導入:
- 4.3
- デフォルト:
- ""
factory
ClassSE<? extends PropertySourceFactory> factoryカスタムPropertySourceFactoryを指定します(ある場合)。デフォルトでは、
PropertiesSE の*.propertiesおよび*.xmlファイル形式をサポートする標準リソースファイルのデフォルトファクトリが使用されます。- デフォルト:
- org.springframework.core.io.support.PropertySourceFactory.class