2

私は、Spring のプロパティ置換メカニズムに少し戸惑っています。この Java Config があるとしましょう

@Configuration
@ComponentScan(basePackageClasses = Application.class)
@PropertySources({
    @PropertySource("classpath:/config/default.properties")
})
public class ApplicationConfig {

@Bean
public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
    PropertySourcesPlaceholderConfigurer pspc = new PropertySourcesPlaceholderConfigurer();
    return pspc;
}

次に、次のようなカスタム プレースホルダーを使用して、Spring-Data アノテーションを追加し、@EnableMongoRepositoriesスキャン用のカスタム ベースパッケージを定義します @EnableMongoRepositories("${my.custom.repobasepackage}")。プレースホルダーは私の default.properties で定義されています。

ただし、このプロパティはここでは解決できません。Spring のプロパティ置換をさらに詳しく調べると、プロパティを解決しようとしていることがわかります。

ただし、プレースホルダーを置き換えるために使用される基本Environmentクラスは、私の PropertyPlaceholderConfigurer については認識していませんが、私の SystemProperties と VM-Props についてしか認識していません。:-(

org.springframework.context.annotation.ClassPathBeanDefinitionScanner#getOrCreateEnvironment.java#339 ( Spring 4.0.1 を使用しています) で「PropertyPlaceholder」が既に配置されていることがわかります。したがって、初期化の順序の問題ではありませんが、使用された BeanDefinitionRegistry は Interface を実装していないため、使用されませんEnvironmentCapable。ここで、Spring App-Context Bootstrap に関する私の理解は終わりです。

誰か助けてくれませんか?Environmentプロパティ プレースホルダーを使用するインスタンスを提供できる BeanDefinitionRegistry はありますか?

どんな助けでも大歓迎です!! 私はあなたのためにクッキーを持っています!:-))

乾杯、ステファン

4

1 に答える 1

1

(ちなみに1つしかないのでラッパー@PropertySourcesは必要ありません)は、構成クラスが処理されたEnvironment に追加されるため、それらのクラス自体の注釈の1つを解決するには遅すぎると思います。my.custom.repobasepackageこれは、システム プロパティとして設定することで確認できます。

別の方法として、Spring Boot を試すことをお勧めします (構成が処理される前にapplication.propertiesが追加されEnvironmentます)。

于 2014-03-05T10:48:43.640 に答える