在application.yml中引用gradle属性



如果这个问题已经问过回答了,或者有文档或例子,请原谅我。我花了几个小时在stackoverflow上寻找解决方案,甚至花了更多的时间在gradle文档中,但还是没能让这个工作。

我有一个具有相当标准的maven布局的spring引导项目。我使用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

在我的应用程序。yml文件,我想将相应的弹簧属性设置为相同的值。(我想在一个地方一起定义它们,在几个地方使用它们。因为version通常在gradle中定义。属性,我想把剩下的也聚集在那里。)

我在应用程序中尝试了以下行。

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

(我也试过${project.name}等。

我运行gradlew properties…属性按预期的值列出。然而,当我运行构建时,yaml文件如预期的那样被复制到buildresourcesmain中,但是${value}令牌没有解析。

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

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

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

任何建议或指针的文件,帮助将非常感激!

我最近遇到了同样的情况——下面是对我有效的方法。

TL;DR:在Spring Boot 1.2.5中,*应用中的属性。Yml被/info忽略;需要使用应用程序。属性信息。*属性。

首先创建src/main/resources/application。包含此内容的属性:

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

其次,将此代码片段添加到构建中。gradle文件:

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

接下来,正常运行构建。这将处理应用程序。Properties文件,并在将文件复制到build/resources/main/application时,将变量替换为它们的构建时值。属性。

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

请注意,为了获得额外的积分,您可以将其添加到构建中。gradle也可以在/info端点中获取Git信息:

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

您还需要将其添加到构建的依赖项部分。Gradle:

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

希望这对你有帮助!

您考虑过使用Copy任务吗?在这里,您可以定义要展开的变量:

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中的Yml,应用程序。Yml放在jar旁边,或者在执行jar时通过-d开关。

最新更新