在 Spring Boot 项目中,引用 Maven pom.xml 文件的 <profile> 标签下面的 <properties> 标签中定义的属性时引用失败。例如:pom.xml 部分配置如下:
<profiles> <profile> <id>dev</id> <properties> <jdbc.url>jdbc:mysql://localhost:3306/test</jdbc.url> <jdbc.driver>com.mysql.jdbc.Driver</jdbc.driver> <jdbc.username>root</jdbc.username> <jdbc.password>aaaaaa</jdbc.password> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> </profiles>
Spring Boot 的 application.properties 文件配置如下:
jdbc.driver=${jdbc.driver} jdbc.url=${jdbc.url} jdbc.username=${jdbc.username} jdbc.password=${jdbc.password}
导致该问题是因为 Spring Boot 修改了 Maven 默认的 ${} 占位符,换成了 @@ 方式。将 application.properties 文件配置修改如下:
jdbc.driver=@jdbc.driver@ jdbc.url=@jdbc.url@ jdbc.username=@jdbc.username@ jdbc.password=@jdbc.password@
执行 maven 的 package 命令,替换成功了。结果如下:
jdbc.driver=co.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/test jdbc.username=root jdbc.password=aaaaaa
在 IDEA 中,进入 pom.xml 文件,点击 <parent> 标签下面的 <version> 标签,进入到 spring-boot-starter-parent.*.pom 文件,如下:
(1)自己 pom 文件中的 <parent> 标签
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
(2)点击 <version> 标签中的 “2.0.3.RELEASE” 后,进入 spring-boot-starter-parent-2.0.3.RELEASE.pom 文件。在该 pom 文件中,<properties> 定义了占位符为“@”,如下:
<properties> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <resource.delimiter>@</resource.delimiter> <maven.compiler.source>${java.version}</maven.compiler.source> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.target>${java.version}</maven.compiler.target> </properties>
同时,还配置了 maven-resources-plugin 插件,该插件禁用了默认的占位符,替换为 @。如下:
<plugin> <artifactId>maven-resources-plugin</artifactId> <configuration> <delimiters> <!-- 声明自己的占位符 --> <delimiter>${resource.delimiter}</delimiter> </delimiters> <!-- 禁用默认占位符 --> <useDefaultDelimiters>false</useDefaultDelimiters> </configuration> </plugin>
更多关于 maven-resources-plugin 插件信息请查看:
http://maven.apache.org/plugins/maven-resources-plugin/resources-mojo.html