【问题标题】:Multiple properties in YAML file Spring BootYAML 文件 Spring Boot 中的多个属性
【发布时间】:2017-08-18 01:04:19
【问题描述】:
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;

它在春季启动时失败,开始说

Could not resolve placeholder 'secdb.spring.datasource.url' in value...

因为,我处于初级水平。 YML 可能是错误的,但我的意图是在 YML 文件中有两个数据源,并将第二个用于一个 JDBC 连接,另一个是默认的。请指导我解决错误

【问题讨论】:

  • @Value("$(spring.datasource.url") 无效。应该是@Value("${spring.datasource.url}")。此外,YAML 文件缩进严重。你还记得激活个人资料dev吗?
  • @Andreas 请更新我的问题,检查。 YML 可能是错误的,但我的意图是在 YML 文件中有两个数据源,并将第二个用于一个 JDBC 连接,另一个是默认的
  • 您问题中的 YAML 无效(第一个 spring.datasource: 不能缩进该空间量)。这真的是 spring-boot 接受的还是您提供的信息不正确?
  • “YML 可能是错误的” 如果 YAML 错误,则属性名称将不是您想要的,您的整个问题都是关于未定义的属性。所以,在做任何事情之前,修复 YAML
  • 现在正确缩进了 YAML 文件。

标签: java spring spring-boot configuration yaml


【解决方案1】:

您在 yaml 文件中犯了两个错误。

  1. --- 之前不要使用空格。
  2. 在您的第一个spring.datasource: 之前,有一个空格。它表示spring.datasource:spring: 的子属性。
  3. @Value("${secdb.spring.datasource.url}") 绝对不是正确的方法。即使你激活了secdb,你也需要得到@Value("${spring.datasource.url}")这样的值。
  4. 我不建议您使用像 secdb: profiles: dev 这样的 Spring 配置文件。这不是一种熟悉的方式。您可以像spring: profiles: secdb 一样使用它,并像spring.profiles.active=secdb 一样激活它。或者,如果您坚持以这种方式使用它,则需要像 spring.profiles.active=secdb 一样激活它。

毕竟,如果你想使用 Spring 的配置文件属性,你需要像这样激活它 $ java -jar -Dspring.profiles.active=production 要么 在 application.properties 中添加spring.profiles.active=production

建议你详细阅读this document

如果有帮助我会很高兴。

【讨论】:

  • 我在之前的问题中错误地缩进了我的 YAML 文件。现在已正确更新,请检查,我也在激活开发弹簧配置文件。
  • 启动spring boot还是有问题吗?在我的试用中,它可以随心所欲。
  • 是的,它仍然在 spring boot 启动时给出Could not resolve placeholder 'secdb.spring.datasource.url' in value... 错误,您能否向我展示它如何为您工作的代码示例。谢谢。
  • 您的程序似乎找不到application.yml。你把它放在像src/main/resources这样的源文件夹中了吗?您需要确保application.ymlapplication.properties 存在于您的classpath 中。
  • 当我给@Value("${spring.datasource.url}") private String URL;它的工作但不是 @Value("${secdb.spring.datasource.url}") 私有字符串 URL,所以它拿起 application-dev.yml 文件,因为我的活动配置文件是 dev。
猜你喜欢
  • 2019-04-13
  • 1970-01-01
  • 2016-10-24
  • 2018-10-27
  • 2017-01-21
  • 1970-01-01
  • 2019-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多