Spring Boot 引用 Maven ${} 占位符无效

本文将介绍怎样解决Spring Boot 引用 Maven ${} 占位符无效

在 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

谁不会休息,谁就不会工作。 —— 列宁
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号