【问题标题】:spring boot external config with sensitive information not working带有敏感信息的spring boot外部配置不起作用
【发布时间】:2020-02-05 09:53:50
【问题描述】:

我正在尝试将外部 yml 文件加载到我的 Spring Boot 应用程序中 在我的类路径中,我有 3 个用于 dev prod 和 tls 配置文件的 yml 文件。

我打算做的是加载一个名为“secret.yml”的外部文件,以覆盖 application-{profiles}.yml 文件中的值。

这个“secret.yml”文件包含敏感信息。它将被添加到 gitignore 文件中。

经过一些尝试,我发现只有当我将名称更改为 application-{profiles}.yml 而不是 secret.yml 时,spring 才会覆盖类路径中的值

我尝试添加 spring.config.name=secret,但这对我不起作用。

./mvnw -Dmaven.test.skip=true -Dspring.config.additional-location=file:./secret.yml -Dspring.config.name=secret.yml

你有解决这个问题的办法吗?

[更新]

我导出环境变量export secret="secret.yml" 然后将变量传递给我的命令行

./mvnw -Dmaven.test.skip=true -Dspring.config.additional-location=file:./secret -Dspring.config.name=secret

没有改变

【问题讨论】:

  • 我不确定您的相对 file: 网址是否有效。您不使用环境变量是否有特殊原因?
  • 该 url 是有效的,因为当我将文件名重命名为 application-profile 时,它​​可以工作并且它会覆盖内容。我同意你的看法,环境是最好的解决方案,但我也试图通过外部文件来实现这一点
  • secret.yml 是在类路径中还是在当前目录中(如您在此处所期望的那样)。
  • 我使用了 file: 所以它不在类路径中。但为了确保,我在类路径中复制了 secret.yml(在 ressources 下),并将命令行更改为 -Dspring.config.location=classpath:secret.yml 并且不覆盖该值

标签: java spring spring-boot


【解决方案1】:

如果您传递多个配置文件,请注意order,最后一个将被顺序覆盖到上一个配置。

-Dspring.config.location=classpath:application-1.yaml,classpath:application-2.yaml .. other config

application-2.yaml 的值将被覆盖到application-1.yaml 如果它们具有相同的配置。

**这将为不同的配置合并。

【讨论】:

    【解决方案2】:

    尝试使用spring boot时的绝对路径documentation

    java -jar app.jar --spring.config.name=application --spring.config.location=file:///Users/home/secret

    如果您不知道绝对路径,您可以使用pwd 命令找到它。

    【讨论】:

      【解决方案3】:

      如果我将命令行包装到 jvmArguments,这里所有的 propsitions 都有效。

      ./mvnw  -Dspring-boot.run.jvmArguments="-Dspring.config.additional-location=file:./secrets.yml"
      

      感谢大家的回复

      【讨论】:

        猜你喜欢
        • 2017-05-05
        • 2015-12-19
        • 1970-01-01
        • 1970-01-01
        • 2011-02-27
        • 1970-01-01
        • 2018-09-17
        • 1970-01-01
        • 2017-11-26
        相关资源
        最近更新 更多