Spring引导无法引用YAML文件中的节点。没有这样的财产

时间:2015-10-15 14:17:50

标签: java spring gradle spring-boot yaml

以下是YAML文件的外观。我要做的是参考databaseHostURL

spring:
   profiles: default

databaseHostURL: localhost:3306

   datasource:
      driverClassName: com.mysql.jdbc.Driver
      url: jdbc:mysql://${databaseHostURL}/mydatabase

这是Spring bootRun上的错误。

6:20:06 PM: Executing external task 'bootRun'...
:compileJava UP-TO-DATE
:compileGroovy UP-TO-DATE
:processResources FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':processResources'.
> Could not copy file '/com/home/users/Test/src/main/resources/application.yml' to '/com/home/users/Test/build/resources/main/application.yml'.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 0.589 secs
No such property: databaseHostURL for class: SimpleTemplateScript7
6:20:07 PM: External task execution finished 'bootRun'.

2 个答案:

答案 0 :(得分:1)

我想看看你的build.gradle文件。 根据你看到的失败, 我在猜测" processResources" build.gradle中的闭包不为空, 我也猜测它看起来像这样:

processResources {
    expand( project.properties )
}

expand()尝试用它们的值替换它认为是application.yml中的属性,当它看到$ {databaseHostUrl}时,它会尝试用该属性的值替换它 - 除了该属性未设置,因此您收到错误消息:

No such property: databaseHostURL for class: SimpleTemplateScript7

如果databaseHostURL确实是您尝试从Gradle environment引用的属性,那么您需要确保它在某处定义。

另一方面,如果databaseHostURL是Spring property,可能是使用环境值设置的,那么我建议您尝试注释掉processResources块,看看是否可以让你的构建通过processResources任务并解决你的问题问题

答案 1 :(得分:1)

我认为这是因为你在Spring和数据源之间添加了属性。

尝试在Spring标记之前添加属性。

databaseHostURL: localhost:3306
spring:
   profiles: default

   datasource:
      driverClassName: com.mysql.jdbc.Driver
      url: jdbc:mysql://${databaseHostURL}/mydatabase