引用 application.yml 中的 gradle 个属性

Referencing gradle properties in application.yml

如果这个问题有人问过,或者有文档或者例子,还望见谅。我花了几个小时在 Whosebug 上寻找解决方案,甚至花了更多时间在 gradle 文档中,但未能完成这项工作。

我有一个 spring 引导项目,它具有非常标准的 maven 布局。我正在使用 gradle 2.4。这是相关文件的布局:

/gradle.properties
/build.gradle
/settings.gradle
/src/main/resources/application.yml

gradle.properties中,我定义了以下属性:

name=Sample microservice
description=brief description of the service goes here
version=1.0.0-SNAPSHOT

在我的 application.yml 文件中,我想将相应的 spring 属性设置为相同的值。 (我想将它们一起定义在一个地方并在多个地方使用它们。由于 version 通常在 gradle.properties 中定义,我想将其余部分也集中在那里。)

我已经在 application.yml 中尝试了以下行,但事情并没有像希望的那样工作:

info.app.name: ${name}
info.app.description: ${description}
info.app.version: ${version}

(我也试过${project.name}等,也没用。)

I 运行 gradlew properties... 属性按预期列出。但是,当我 运行 构建时,yaml 文件按预期复制到 \build\resources\main,但 ${value} 标记未解析。

我还在 build.gradle 文件中包含了以下几行,但事情仍未解决。

processResources {
   filesMatching('gradle.properties') { expand(project.properties) }
}

(我的目标是使用执行器 /info 端点将这些属性的值提供给服务调用者。)

任何对文档有帮助的建议或指示都将不胜感激!

您是否考虑过使用复制任务?在那里你可以定义变量来扩展:

application.yml:

info.app.name: ${project.name}
info.app.description: ${project.description}
info.app.version: ${project.version}
info.app.foo: ${foo}

build.gradle:

task copyConfig(type: Copy) {
  from ('src/main/resources') 
  into 'build/config'

  // refer to project and replace foo by string bar
  expand(project: project, foo: 'bar')

}

如果你想把你的属性分开,你也可以参考一个属性文件:

expand(project.properties)

您可能想看看 gradle 文档:https://docs.gradle.org/current/userguide/working_with_files.html

你明白了吗?

经过多次修改,我发现这些值在运行时会扩展。当 Spring 定义环境中的属性时,${value} 标记会按照我希望的方式展开。经过深思熟虑,这是完全有道理的。这些值无法在构建时解析,因为它可以在各种地方设置。运行时 spring 属性反映当前值,无论 属性 是通过 jar 中的 application.yml 设置的,application.yml 坐在 jar 旁边,还是通过 -d 开关jar 被执行。

我最近遇到了同样的情况 - 这是对我有用的方法。

TL;DR:在 Spring Boot 1.2.5 中,application.yml 中的 info.* 属性被 /info 忽略;需要使用 application.properties 获取信息。* 属性。

首先,使用以下内容创建 src/main/resources/application.properties:

info.build.description=${description}
info.build.name=${name}
info.build.version=${version}

其次,将此代码段添加到您的 build.gradle 文件中:

processResources {
    filesMatching("**/application.properties") {
        expand( project.properties )
    }
}

接下来,运行 正常构建。这将处理 application.properties 文件并在将文件复制到 build/resources/main/application.properties .

时用它们的构建时值替换变量

对我来说,当 运行 部署 .jar 时,我的 /info 端点会填充扩展值,这就是目标。

请注意,对于奖励积分,您可以将此添加到您的 build.gradle 以在 /info 端点中获取 Git 信息:

apply plugin: "com.gorylenko.gradle-git-properties"

您还需要将其添加到 build.gradle 的依赖项部分,才能正常工作:

classpath 'gradle.plugin.com.gorylenko.gradle-git-properties:gradle-git-properties:1.+'

希望对您有所帮助!