application.yml中的环境变量不适用于以空格开头的默认值

Ama*_*eag 4 spring yaml spring-boot

我有以下application.yml

sftp:
  sessionFactory:
    host: ${HOST:127.0.0.1}
    username: ${USERNAME:test}
    password: ${PASSWORD: test}
Run Code Online (Sandbox Code Playgroud)

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

    Caused by: mapping values are not allowed here
 in 'reader', line 26, column 25:
        password: ${PASSWORD: test}
Run Code Online (Sandbox Code Playgroud)

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

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

sftp:
  sessionFactory:
    host: 127.0.0.1
    username: test
    password: ' test'
Run Code Online (Sandbox Code Playgroud)

一切正常。

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

Pär*_*son 6

SpEL使您可以合并原始字符串和运算符。在您的情况下,您只需要一个纯字符串,这样就可以定义您的属性,如下所示:

password: ${PASSWORD:#{' test'}}
Run Code Online (Sandbox Code Playgroud)

范例程式码

application.yaml

testing:
  my:
    username: ${USERNAME:user}
    password: ${PASSWORD:#{' test'}}
Run Code Online (Sandbox Code Playgroud)

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 + ")");
  }
Run Code Online (Sandbox Code Playgroud)

日志

User: (user)
Pass: ( test)
Run Code Online (Sandbox Code Playgroud)