我正在尝试将属性从pom.xml加载到application.properties中。我想创建两个配置文件:dev和prod以使用不同的数据库URL。我在我的所有应用程序中使用Jenkins作为CI(主要是Spring MVC,没有Boot项目)正在使用maven配置文件部署到Tomcat。使用maven属性有可能做到这一点吗?
我试过这样的事情:
spring.datasource.url=${jdbc.url}
答案 0 :(得分:51)
在执行此操作之前,请考虑从可部署包中外部化属性文件。这样,您就可以在每个环境中部署相同的编译。它将为你的Jenkins节省一些实际上不必要的工作。最佳做法是仅构建一次应用程序,但是,如果您不相信,请按照以下步骤进行操作。
在 pom.xml 中定义具有适当属性值的配置文件。
<profile>
<id>dev</id>
<properties>
<jdbc.url>your_dev_URL</jdbc.url>
</properties>
</profile>
设置Maven Resources Plugin以过滤包含 application.properties 文件的目录。
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
...
</build>
如果你使用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@
您还可以查看有关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@'