在我的POM中,我继承了Spring Boot的“spring-boot-starter-parent”:
<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将maven-resources-plugin的默认过滤器令牌从$ {maven.token}更改为@ maven.token @,以防止与Spring样式占位符冲突。背景:Spring的分隔符与Maven分隔符完全相同。
根据我的理解:更改会影响Maven属性,而不会影响Spring属性扩展。但也许我错了,反之亦然?
现在,在我的基于XML的Spring应用程序上下文配置文件中使用“context:property-placeholder”时,通过以下方式导入:
@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);
}
}
Spring特定键的属性扩展不再起作用。在我的“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}"/>
...
但Spring中的替换仅在用“@ jpa.driver.classname @”替换“$ {jpa.driver.classname}”时才有效
根据following remark添加以下XML属性:
order="1"
ignore-unresolvable="true"
到“property-placeholder”我在Spring Boot启动期间没有任何异常告诉我:
“无法在字符串值中解析占位符'jpa.driver.classname' “$ {jpa.driver.classname}”
但我确信财产扩张不能正常运作,因为“财产占位符”忽略了无法解决的项目。稍后当使用非扩展属性键实例化bean时会导致异常。仅设置“order = 1”属性也无济于事。
也许,Spring Boot没有必要明确地将“property-placeholder”用作Spring Boot searches for "application.properties" automatically within the application。但我不想转向这种方法。
有没有办法使用“spring-boot-starter-parent”并保持典型的Spring属性扩展活动?
答案 0 :(得分:0)
我发现了我的问题:-)这不是Spring会引起这种奇怪的效果,而是我的配置。
问题是:属性文件不在类路径的根文件夹中,而是位于下面。只要没有加载属性文件,就不能执行属性扩展。
要查找所有* .properties文件 - 即使在子目录中也必须使用ANT样式表示法:
<context:property-placeholder
ignore-resource-not-found="false"
location="classpath*:**/*.properties"/>
小心:使用此定义,所有“* .properties”文件都位于JAR文件和类路径根目录的任何子文件夹中。最后,它们合并为一个属性文件。所以,内存消耗可能会增加!
有关详细信息,请分别参考Spring documentation following comment @stackoverflow.com。