我试图在gradle的帮助下初始化我的dataSource但是gradle没有将值放入我的yml
存储在我的机器上的.properties中,即~/.gradle
,我做了一个。该位置的属性文件。
在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文件中。
答案 0 :(得分:1)
在您的设置中,您指示Gradle 在之后运行war
任务时,它应始终运行copyDBConfig
任务,这已经太晚了,因为战争已经建成。无论如何为此做一个自己的任务不是要走的路。而是像这样配置processResources
任务:
processResources {
filesMatching('app.yml') {
expand DB_URI: project.findProperty("dbURI") ?: "",
DB_USERNAME: project.findProperty("dbUsername") ?: "",
DB_PASSWORD: project.findProperty("dbPassword") ?: ""
}
}