通过 Gradle 传递数据库凭据

Pass database credential through Gradle

我正在使用 gradle credentials plugin to pass user and password database to liquibase plugin。此外,我正在使用 spring 数据存储库和休眠数据层,我想向它传递与 liquibase 插件相同的配置。有一种方法可以通过 gradle 传递凭据(我不想创建 application.properties 文件,因为凭据已经存储在凭据插件中)?

我正在使用以下代码将凭据传递给 liquibase:

def changelog = "$projectDir/src/main/resources/db_version/changelog-master.xml"
def urlDatabase = ...
def schema = ...

liquibase {
    activities{
        main {
            changeLogFile changelog
            url urlDatabase
            username credentials.devUsr
            password credentials.devPass
            defaultSchemaName schema
        }
    }
}

我想做类似的事情:

datasource{
    username credentials.devUsr
    password credentials.devPass
}

或者编写属性:

spring.datasource.username credentials.devUsr
spring.datasource.password credentials.devPass

如果您使用的是 Spring 自动接受环境变量的引导,您可以通过此机制传递数据库凭据。这里对应的是documentation

如果你没有Spring引导,你仍然可以通过环境传递变量,但你需要在你的应用程序中实现接受。这里是 comprehensive overview

这是关于 passing env variables in Gradle 的回答。

Spring 提供了多种在配置中使用属性的方法以及提供它们的方法,包括将它们作为命令行参数或系统属性传递。有关详细信息,请参阅 https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

在您的 Spring 配置中进行设置后,您只需指示 Gradle 将插件中的值作为命令行参数或系统属性传递。

这描述了一种使用 Gradle 设置系统属性的方法:https://discuss.gradle.org/t/how-to-set-a-system-property-before-calling-task-in-gradle/6060/4

此处似乎涵盖了传递命令行参数:Gradle task - pass arguments to Java application

你是对的@Jens Schauder 和@webdizz,但这里是例子:

bootRun{
   systemProperty "spring.datasource.username", credentials.devUsr
   systemProperty "spring.datasource.password", credentials.devPass
}

使用此代码,我在启动 spring 引导应用程序时将数据库凭据作为系统属性传递。