が解決されない私は、次のしている設定ファイル:私は、次のVMオプションを指定して自分のアプリケーションを実行春@Configurationファイルが@value注釈
@Configuration
public class PropertyPlaceholderConfigurerConfig {
@Value("${property:defaultValue}")
private String property;
@Bean
public static PropertyPlaceholderConfigurer ppc() throws IOException {
PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
ppc.setLocations(new ClassPathResource("properties/" + property + ".properties"));
ppc.setIgnoreUnresolvablePlaceholders(true);
return ppc;
}
}
:
-Dproperty=propertyValue
だから私は思います特定のプロパティファイルを起動時にロードするアプリケーションのようなものです。しかし何らかの理由でこの段階で@Value
注釈は処理されず、プロパティはnull
です。一方、xmlファイルでPropertyPlaceholderConfigurer
が設定されていると、すべて正常に動作します。 Xmlファイルの例:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="ignoreResourceNotFound" value="true"/>
<property name="location">
<value>classpath:properties/${property:defaultValue}.properties</value>
</property>
</bean>
プロパティ値を別のSpring構成ファイルに注入しようとすると、正しく挿入されます。 PropertyPlaceholderConfigurer
Beanの作成をその設定ファイルに移動すると、フィールド値が再びnullになります。
は回避策として、私はこのコード行を使用します。
System.getProperties().getProperty("property", "defaultValue")
もある作品が、私は、このような現象が発生している理由を知りたいのですが、多分他の方法でそれを書き換えることが可能であるが、 xmlなし?あなたがわずかに異なるそれをしなければならないあなたはVMのオプションを使用してアプリケーションを実行し、アプリケーションにそのオプションにアクセスする場合
まず、ProperySourcesPlaceholderConfigurerを使用することを強くお勧めします。あなたのクラスでは '@ PropertySource'を使用します。次に、Beanは静的である必要があります。 –
@ M.Deinum '@ PropertySource'は完璧に動作しますが、' ProperySourcesPlaceholderConfigurer'のカスタム実装があればどうなりますか? –
カスタム実装が必要な理由 –