2016-11-30 64 views
0

我试图用gradle初始化我的dataSource,但是gradle没有将值存入我存储的yml在我的机器上的.properties中,例如~/.gradle,我在该位置创建了一个.properties文件。从存储在本地存储在gradle中的.properties文件中的值中将值添加到war文件到yml文件中

在摇篮我做了一个方法来获得从的.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 

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

当我运行应用程序,我得到了如下错误:

java.sql.SQLException: Driver:[email protected] returned null for URL:${DB_URI} 

注:build/resources/main/app.yml从我app.properties文件中的值都在那里,只是没有在战争文件。

回答

1

在你的设置,您指示摇篮正在运行的任务war应该始终运行copyDBConfig任务,这是为时已晚,因为战争已经建成。无论如何,为此做一个自己的任务不是要走的路。改为配置processResources这样的任务:

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