Spring Boot:使用 yaml 中配置的 Maven 属性

Posted

技术标签:

【中文标题】Spring Boot:使用 yaml 中配置的 Maven 属性【英文标题】:Spring Boot: use of Maven properties configured in yaml 【发布时间】:2017-11-07 12:31:05 【问题描述】:

我正在尝试从 Maven 中提取一些属性并在我的应用程序启动时打印它们。我正在使用 Spring Boot,因此资源过滤会自动为我完成。

在我的 application.yml 我有以下内容

  applicationName: "@project.artifactId@"
  buildVersion: "@project.version@"
  buildTimestamp: "@maven.build.timestamp@"

当我在 IntelliJ 上运行它时,我得到了想要的结果,我的属性按预期填充和打印 (单引号的结果相同) 删除引号会给我一个 SnakeYaml 关于使用“@”字符的例外情况

当我在 Cent-OS 上运行它时,通过 jar (java -jar blah..blah) 属性没有被解析,而是被视为字符串,而不是正确的版本号等,打印的是什么是上面引号内的字符串。

关于如何解决这个问题的任何想法? 和我运行jar的方式有关吗?

我以this为例

【问题讨论】:

这有点奇怪......最近我测试了这个并且工作正常,也许这取决于spring-boot版本......你使用的是什么版本? 我正在使用 1.5.1 。我最终使用 Spring 的属性格式而不是 Yaml 添加了一个额外的属性文件 【参考方案1】:

您可以使用getClass().getPackage().getImplementationVersion() 等方式以编程方式获取它们。

【讨论】:

问题是关于 Maven 属性而不是类包信息(这是在专用的 package-info.class 中声明所必需的)【参考方案2】:
@Value("$applicationName")
private String applicationName;

【讨论】:

以上是关于Spring Boot:使用 yaml 中配置的 Maven 属性的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot:使用 yaml 中配置的 Maven 属性

如何使用 spring boot + .yaml 创建配置文件?

如何使用 spring boot + .yaml 创建配置文件?

Spring Boot2 系列教程理解Spring Boot 配置文件 application.properties

Spring Boot 配置文件: application.properties和application.yaml

Spring Boot项目的Logback配置文件使用yaml格式