私は以前に他のプロジェクトでこれを機能させましたが、同じことをやり直していますが、何らかの理由で機能していません。 Spring @Value
はプロパティファイルから読み取っていませんが、代わりに文字通り値を取得しています
AppConfig.Java
@Component
public class AppConfig
{
@Value("${key.value1}")
private String value;
public String getValue()
{
return value;
}
}
applicationContext.xml:
<context:component-scan
base-package="com.test.config" />
<context:annotation-config />
<bean id="appConfigProperties"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:appconfig.properties" />
</bean>
appconfig.properties
key.value1=test value 1
私のコントローラーで、私が持っている場所:
@Autowired
private AppConfig appConfig;
アプリケーションは正常に起動しますが、実行すると
appConfig.getValue()
それは戻ります
${key.value1}
プロパティファイル内の値には解決されません。
考え?
問題は、applicationContext.xmlとspring-servlet.xmlの問題が原因です。これは、Bean間のスコープの問題でした。
pedjaradenkovicは既存のリソースを親切に教えてくれました: @ Controllerクラスの@Valueアノテーションはプロパティファイル内の値に評価されません および Spring 3.0.5はプロパティから@Valueアノテーションを評価しません
また、@value
が機能しなかった理由は、@value
にはPropertySourcesPlaceholderConfigurer
ではなくPropertyPlaceholderConfigurer
が必要であることがわかりました。私は同じ変更を行い、それは私のために働いた、私は春4.0.3リリースを使用しています。構成ファイルの以下のコードを使用してこれを構成しました-
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
私の場合、静的フィールドは挿入されません。
sprig-bootユーザーの場合、Spring 3.1で追加されたPropertyPlaceholderConfigurerと新しいPropertySourcesPlaceholderConfigurerの両方。そのため、プロパティファイルにアクセスするのは簡単です。注入するだけ
注:プロパティがStatic
であってはならないことを確認してください
@Value("${key.value1}")
private String value;
私の場合、中括弧がありませんでした。正しいフォーム@Value("foo.bar") String value
の代わりに@Value("${foo.bar}") String value
がありました
私はスプリングブートを使用していたので、バージョンを1.4.0.RELEASE
から1.5.6.RELEASE
にアップグレードすると、この問題は解決しました。
Pedjaradenkovicのコメントを読んでください。
彼が提供するリンクに加えて、これが機能しない理由は、@Value
処理にはPropertySourcesPlaceholderConfigurer
ではなくPropertyPlaceholderConfigurer
が必要だからです。