在Spring Boot中的application.properties中使用Maven属性

时间:2016-04-18 20:16:56

标签: spring maven spring-boot spring-boot-maven-plugin

我正在尝试将属性从pom.xml加载到application.properties中。我想创建两个配置文件:dev和prod以使用不同的数据库URL。我在我的所有应用程序中使用Jenkins作为CI(主要是Spring MVC,没有Boot项目)正在使用maven配置文件部署到Tomcat。使用maven属性有可能做到这一点吗? 我试过这样的事情: spring.datasource.url=${jdbc.url}

3 个答案:

答案 0 :(得分:51)

在执行此操作之前,请考虑从可部署包中外部化属性文件。这样,您就可以在每个环境中部署相同的编译。它将为你的Jenkins节省一些实际上不必要的工作。最佳做法是仅构建一次应用程序,但是,如果您不相信,请按照以下步骤进行操作。

  1. pom.xml 中定义具有适当属性值的配置文件。

    <profile>
        <id>dev</id>
       <properties>
           <jdbc.url>your_dev_URL</jdbc.url>
       </properties>
    </profile>
    
  2. 设置Maven Resources Plugin以过滤包含 application.properties 文件的目录。

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        ...
    </build>
    
  3. 如果你使用Spring Boot 1.3或更高版本,你应该知道为了避免Spring Boot占位符和Maven Resources Plugin过滤的令牌之间的冲突,该框架为过滤值引入了a solution that requires using a different syntax

    现在,您应使用${property.key}而不是@property.key@。在这种情况下, application.properties 必须包含以下示例才能正常工作:

    spring.datasource.url=@jdbc.url@
    
  4. 您还可以查看有关separating Spring properties files for different Maven profiles的帖子。这样您就可以将pom.xml中的值外部化。

答案 1 :(得分:1)

当然有。只需在{em> application.properties 文件上使用Maven Filtering,Maven就会在文件中编写您的配置文件特定值。

但是,您必须明白,虽然Maven配置文件在应用程序包/构建时工作,但Spring Boot会在运行时执行。换句话说,使用Maven配置文件,您将获得特定于配置文件的不可变构建,而在使用Spring Boot中的配置时,您可以在每次启动它之前更改应用程序配置或even while it's running

另见:

答案 2 :(得分:0)

除了Daniel Olszewski之外,在我的yml文件中还出现了一个错误:(请勿将@用于缩进)

所以我通过添加单引号将其修复。有人可能会觉得有用。

spring:
 datasource:
  url: '@jdbc.url@'