アノテーションインターフェース 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
を指定します(ある場合)。boolean
property 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
を指定します(ある場合)。デフォルトでは、
Properties
SE の*.properties
および*.xml
ファイル形式をサポートする標準リソースファイルのデフォルトファクトリが使用されます。- デフォルト:
- org.springframework.core.io.support.PropertySourceFactory.class