spring:
profiles: dev
spring.datasource:
driver-class-name:
password: ~
url: ~
username: ~
---
secdb:
profiles: dev
spring.datasource:
driver-class-name: ~
password: ~
url: ~
username: ~
---
我在 application.yml 文件中声明了上述两个属性,但当我在实现类中使用它时,如下所示。
@Value("${spring.datasource.url}")
private String URL;
它可以工作并从 YML 文件中获取 url。 但是当我这样做时
@Value("${secdb.spring.datasource.url}")
private String URL;
它在 Spring 启动时失败,开始说
Could not resolve placeholder 'secdb.spring.datasource.url' in value...
因为,我处于初级水平。 YML 可能是错误的,但我的目的是在 YML 文件中有两个数据源,并将第二个数据源用于一个 JDBC 连接,其他一个是默认的。请指导我解决错误
最佳答案
您的 yaml 文件中犯了两个错误。
---
之前不要使用空格.- 在你的第一个
spring.datasource:
之前,有一个空格。它表示spring.datasource:
是spring:
的子属性. -
@Value("${secdb.spring.datasource.url}")
绝对不是正确的方法。即使你活跃secdb
,您还需要获取类似@Value("${spring.datasource.url}")
的值. - 我不建议您使用 Spring 配置文件,如
secdb: profiles: dev
。这不是一种熟悉的方式。您可以像spring: profiles: secdb
一样使用它并像spring.profiles.active=secdb
一样激活它。或者,如果您坚持以这种方式使用它,则需要像spring.profiles.active=secdb
一样激活它。 .
毕竟,如果你想使用Spring配置文件属性,你需要激活它,就像
$ java -jar -Dspring.profiles.active=production
或者
添加spring.profiles.active=production
在 application.properties 中。
我建议您阅读this document详细。
如果有帮助我会很高兴。
关于java - Spring Boot YAML 文件中的多个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43010559/