在我的 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 文档Spring Boot Parent 将 maven-resources-plugin 的默认过滤器令牌从 ${maven.token} 更改为 @maven.token@ 以防止与 Spring-style 占位符发生冲突。背景: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@”时才有效
在添加以下 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 在应用程序中自动搜索“application.properties”。但我不想改用这种方法。
有没有办法使用“spring-boot-starter-parent”并保持典型的 Spring 属性扩展处于活动状态?