将系统属性从Gradle传递到Spring Boot

时间:2016-10-02 18:58:58

标签: java spring gradle spring-boot

我想将某些安全敏感属性传递到我的Spring Boot应用程序中,我通过命令行和/或外部设置的系统属性在开发过程中通过Gradle启动。我无法将这些内容写入build.gradle脚本或属性文件之类的内容,因为它们将被提交到源代码管理中,然后将公开发布。

我无法获得任何我发现的解决方案,使Gradle可以使用Gradle 2.4.4为应用程序提供这些值。

几个解决方案如下所示,其中系统属性在bootRun任务中设置:

bootRun {
    systemProperties System.properties
}

这似乎完全覆盖了默认的bootRun任务,并打破了Spring Boot的自动主类检测。

其他地方建议:

bootRun {
    run {systemProperties System.properties}
}

这不会覆盖正常配置,但在运行闭包内设置的属性在bootRun任务中不可用。

当我使用Intellij启动Gradle时,会发生这一切。

如果我从命令行启动Gradle并尝试传入属性方式,例如:

gradle -Dspring.email.password=123 bootRun

无论配置如何,都不会在任何地方设置该属性。更改参数的顺序无效。

1 个答案:

答案 0 :(得分:2)

将JVM args作为gradle属性传递,并使用以下配置将它们转发到应用程序:

bootRun {
    if (project.hasProperty('jvmArgs')) {
        jvmArgs project.jvmArgs.split('\\s+')
    }
}

应用jvmArgs运行:./gradlew bootrun -PjvmArgs="-Dspring.profiles.active=myprofile -Dspring.email.password=secret"