【问题标题】:Environment variables in application.yml doesn't work with default values that start with a spaceapplication.yml 中的环境变量不适用于以空格开头的默认值
【发布时间】:2018-04-04 05:56:34
【问题描述】:

我有以下 application.yml

sftp:
  sessionFactory:
    host: ${HOST:127.0.0.1}
    username: ${USERNAME:test}
    password: ${PASSWORD: test}

密码以空格开头。启动 Spring Boot 应用程序时,它会崩溃:

    Caused by: mapping values are not allowed here
 in 'reader', line 26, column 25:
        password: ${PASSWORD: test}

当尝试使用 ${PASSWORD:'test'} 时,密码的值是 password='test' 而不是 password=test em>。

在引入环境变量之前,application.yml 看起来像这样:

sftp:
  sessionFactory:
    host: 127.0.0.1
    username: test
    password: ' test'

一切正常。

知道如何指定这种以空格开头的默认值吗? 谢谢。

【问题讨论】:

    标签: spring spring-boot yaml


    【解决方案1】:

    编辑: 我想澄清一下,SpEL 仅适用于 @Value 绑定属性,如文档中的 here 所述。 @ConfigurationProperties 不支持 SpEL 表达式。

    SpEL 允许您组合原始字符串和操作符。在您的情况下,您只需要一个纯字符串,以便您可以像这样定义您的属性:

    password: ${PASSWORD:#{' test'}}
    

    ##示例代码

    应用程序.yaml

    testing:
      my:
        username: ${USERNAME:user}
        password: ${PASSWORD:#{' test'}}
    

    Testing.java

    @Component
    public class Testing {
    
      @Value("${testing.my.username}")
      String username;
    
      @Value("${testing.my.password}")
      String password;
    
      @PostConstruct
      public void post() {
        System.out.println("User: (" + username + ")");
        System.out.println("Pass: (" + password + ")");
      }
    

    日志

    User: (user)
    Pass: ( test)
    

    【讨论】:

    • 它不工作...表达式未评估...密码的值为 password=#{'test'}...无论如何谢谢
    • 它对我有用。我将使用示例代码更新响应。
    • 当我使用@ConfigurationProperties(prefix = "testing.my") 时,它对我也不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-31
    • 2019-10-29
    • 2016-02-29
    • 2014-12-18
    • 2021-05-01
    • 1970-01-01
    相关资源
    最近更新 更多