将存储在本地存储在 gradle 中的 .properties 文件中的值添加到 war 文件到 yml 文件

Adding values into war file to yml file from values stored in a .properties file that are stored locally in gradle

我试图在 gradle 的帮助下初始化我的数据源,但是 gradle 没有将值放入我的 yml 中,它存储在我机器上的 .properties 中,即~/.gradle 然后我在该位置创建了一个 .properties 文件。

在 Gradle 中,我创建了一个从 .properties 文件中获取值的方法,如下所示:

task copyDBConfig(type: Copy) {

    from 'src/main/resources'
    include 'app.yml'
    into 'build/resources/main'
    expand([
            DB_URI: project.findProperty("dbURI") ?: "",
            DB_USERNAME: project.findProperty("dbUsername") ?: "",
            DB_PASSWORD: project.findProperty("dbPassword") ?: "",
    ])
}

war.finalizedBy(copyDBConfig)

然后在我的 yml 文件中我有:

spring:
  datasource:
      url: ${DB_URI}
      username: ${DB_USERNAME}
      password: ${DB_PASSWORD}
      driverClassName: oracle.jdbc.OracleDriver

然而,当我构建 war 文件并查看 app.yml 文件时,正确的值不存在,只有 ${DB_URI} 等,而不是它应该从我的文件中获取的字符串.properties 文件并输入到我的 app.yml 文件中。

当我 运行 应用程序时,出现以下错误:

java.sql.SQLException: Driver:oracle.jdbc.OracleDriver@af2025f returned null for URL:${DB_URI}

注意:build/resources/main/app.yml 下,我的 app.properties 文件中的值在那里,只是不在 war 文件中。

在您的设置中,您指示 Gradle 在 之后 您的 war 任务是 运行 它应该总是 运行 copyDBConfig 任务,为时已晚,因为 war 已经构建。无论如何,为此制定自己的任务不是可行的方法。而是像这样配置 processResources 任务:

processResources {
    filesMatching('app.yml') {
        expand DB_URI: project.findProperty("dbURI") ?: "",
               DB_USERNAME: project.findProperty("dbUsername") ?: "",
               DB_PASSWORD: project.findProperty("dbPassword") ?: ""
    }
}