0

PropertySourcesPlaceholderConfigurer Bean を明示的に宣言しない場合に、Spring がプロパティ プレースホルダーを解決する方法に頭を悩ませようとしています。注釈を介してJavaを介してSpringを構成する既存のプロジェクトのソースを調べます。. .

春のコンテキストxmlで:

<context:component-scan base-package="com.myproject.config" />

残りのアプリと構成をブートストラップするJavaファイルで

package com.myproject.config;

@Configuration
@ComponentScan(basePackages = {"com.myproject.app"})
@PropertySource("config/${app.env}.properties")
public class RootConfig {

}

それはすべて非常に巧妙ですが、私の人生では、環境変数に対して ${...} プロパティのプレースホルダー構文を評価するようにSpringに指示するものを理解できません。春のドキュメントで答えを見つけることができませんでしたが、春はこれを行うためにPropertySourcesPlaceholderConfigurerクラスに依存していることを理解しています。このクラスがいつ/どのように暗黙的に呼び出されるかについては、何もわかりません。@Configuration アノテーションによるものですか、それともスプリング ブートストラップ プロセスの別の部分ですか?

これは理解するのに最も適切なことではないことはわかっていますが、「春の魔法」として何かを書き留めるのは嫌いです. これについての洞察は素晴らしいでしょう!

4

3 に答える 3

0

Spring @Configuration documentation に従ってRootConfigクラスはどこかから「ブートストラップ」する必要があります。以下にいくつかの例を示します。

AnnotationConfigApplicationContext経由

AnnotationConfigApplicationContext context = 
       new AnnotationConfigApplicationContext();
ccontext.register(RootConfig.class);

Spring xml経由

<beans>
  <context:annotation-config/>
  <bean class="...RootConfig"/>
</beans>

RootConfigaPropertySourcesPlaceholderConfigurerが宣言されているかどうかを確認するために、ブートストラップしているソースを確認しましたか? 例えば:

<context:property-placeholder/>
于 2014-02-22T06:17:08.653 に答える
0

私はそれをしようとします:

@PropertySource("config/#{ systemProperties['app.env'] }.properties")

(ソース: http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/expressions.html#expressions-beandef-xml-based ) 評価されたかどうか教えてください。

于 2014-02-21T19:43:06.760 に答える