首页 文章

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

提问于
浏览
2

我想将某些安全敏感属性传递到我的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 回答

  • 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"

相关问题