2016-12-18 2 views
0

「プロパティ・プレースホルダー」との組み合わせで春ブーツ・スターター・親

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.4.2.RELEASE</version> 
</parent> 

よりますSpring Boot documentation Spring Boot Parentは、Springスタイルのプレースホルダとの競合を避けるため、maven-resources-pluginのデフォルトのフィルタトークンを$ {maven.token}から@ maven.token @に変更します。背景:Springの区切り文字はMavenデリミタと同じです。

私の理解によれば、変更はMavenプロパティに影響し、Springプロパティ拡張には影響しません。しかし、私は間違っているかもしれません。経由して輸入し、私のXMLベースのSpringアプリケーションコンテキストコンフィギュレーションファイルに:「プロパティ・プレースホルダーコンテキスト」:使用しているとき

さて、

@Configuration 
@ImportResource("spring/applicationContext-core.xml") 
@EnableJpaRepositories 
@EnableAutoConfiguration 
public class StudyDayApplication { 

    /** 
    * This main is for using Spring Boot in case of a JAR file packaging. 
    * 
    * @param args 
    */ 
    public static void main(String[] args) { 
     SpringApplication.run(StudyDayApplication.class, args); 
    } 
} 

春特定のキーのプロパティの拡張はもう動作しません。私の "application-core.xml"では、私はSpring固有の "property-placeholder"を使用して、外部化された構成プロパティを使用しています。しかし、私はまだSpring固有のプロパティデリミタ(例えば、 "dataSource" beanの "jpa.driver.classname"を展開する)を使いたいと思っています。

... 
<context:property-placeholder 
     ignore-resource-not-found="false" 
     location="classpath*:*.properties"/> 
... 
<bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource"> 
    <property name="driverClassName" value="${jpa.driver.classname}"/> 
... 

しかし、次のXMLを追加するときfollowing remarkによると

"@ @ jpa.driver.classname" で "$ {jpa.driver.classnameを}" 交換時に春の交換のみ動作属性:

order="1" 
ignore-unresolvable="true" 

「プロパティ・プレースホルダー」に私は私に言って春ブート起動時に例外を得ることはありません:

「文字列値 にプレースホルダ 『jpa.driver.classname』を解決できませんでした 『$ {jpa.driver.classname}』

しかし、私は、プロパティの拡張が正しくように動作しないことを確信しています」 property-placeholder "は解決不可能な項目を無視します。 Beanが展開されていないプロパティキーを使用してBeanをインスタンス化すると、後で例外が発生します。 "order = 1"属性だけを設定しても役に立ちません。

「プロパティプレースホルダ」を明示的にSpring Boot searches for "application.properties" automatically within the applicationとして使用する必要はありません。しかし、私はこのアプローチに切り替えたくありません。

"spring-boot-starter-parent"を使用し、一般的なSpringプロパティ展開を有効にする方法はありますか?

答えて

0

私の問題が見つかりました:-)この奇妙な効果を引き起こしますが、私の設定は、春ではありません。

問題は、プロパティファイルがクラスパスのルートフォルダにありませんでしたが、下にあります。また、プロパティファイルがロードされない限り、プロパティ拡張は実行できません。

*をすべて検索してください。プロパティファイル - でも、サブディレクトリでANTスタイルの表記を使用する必要があります。

<context:property-placeholder 
     ignore-resource-not-found="false" 
     location="classpath*:**/*.properties"/> 

注意してください:この定義ですべての「* .propertiesファイル」のファイルはJARファイルに位置しており、任意のサブフォルダ発見されましたクラスパスのルート。最後に、1つのプロパティファイルにマージされます。したがって、メモリ消費量が増加する可能性があります。

詳細については、それぞれSpring documentationおよびfollowing comment @stackoverflow.comを参照してください。

関連する問題