【问题标题】:Is it possible to put application.yml variables in to property file?是否可以将 application.yml 变量放入属性文件?
【发布时间】:2020-01-30 05:05:02
【问题描述】:

我的 spring boot 项目使用 application.yml 作为配置,我不想在其中写入数据库凭据,因为 yml 文件是源代码的一部分,它将被推送到公共代码存储库中。因此,我需要将凭据放入properites 文件中,并将属性文件放在应用程序主机服务器上的某个位置。

那么,是否可以将 application.yml 中的表达式外部化到属性文件中?

例如 使用application.yml sprint启动应用程序

spring:
  datasource:
    jdbc-url: ${url}
    username: ${user}
    password: ${pwd}

然后我们可以将凭证放入 app.properties 如下,并将此文件放入主机服务器。

url="jdbc:xxxx"
user="username"
pwd="password"

【问题讨论】:

  • 对我来说闻起来像是 XY 问题。你想解决什么问题?
  • @BoristheSpider 稍微更新了描述。
  • 好的,环境变量有什么问题?或者实际上installing你的Spring Boot项目在应用服务器上正确?

标签: java spring-boot yaml


【解决方案1】:

你可以通过调用文件application.properties来做到这一点。

但请记住,属性名称应类似于 yaml 结构:

spring.datasource.url="jdbc:xxxx"
spring.datasource.user="username"
spring.datasource.pwd="password"

【讨论】:

  • 问题要求在单独的文件中定义属性并在 application.yml 中使用它们
  • 我可以通过 application.properties 访问 .yml 文件吗?我有使用 bootstrap.yml、busdriver.yml 和 busdriverdev.yml 的应用程序。我已将 bootstrap.yml 更改为 application.properties,但我需要访问 busdriver.yml。怎么能这样?
【解决方案2】:

这是所有开发人员都非常关心的问题,如何保护数据库凭据以防止任何滥用,但相信我将凭据保存在单独的文件中不会增加太多价值。

如果有人能够访问您的 application.yml,那么一次也可以访问您位于单独文件夹中的属性文件。

了解您的问题后,您需要将代码推送到公共存储库中,您必须保护属于您的内容。我的输入很少。

  • 你不需要在你的 application.yml 中单独的属性文件和相应的变量,你可以提供你的值,你总是可以 在应用程序启动期间在应用程序外部覆盖它们。

举例

spring:
  datasource:
    jdbc-url: myFakeURL
    username: MyFakeUserName
    password: myFakePAssword

一旦你定义了它们,你可以像这样覆盖它们

java -jar -Dspring.datasource.jdbc-url=myRealURL  -Dspring.datasource.jdbc-username=myRealUserName  -Dspring.datasource.password=myRealpassword   myApplication.jar 

记住:这是一种方式,还有另一种方式

您可以创建 shell 脚本/批处理文件(包含这些属性)并在启动应用程序之前执行

使用 Spring Boot,您必须考虑做的事情很少 即加密您的属性值。春天有美丽的支撑 Jasypt 用于加密属性,相信我,你会拥有 几乎不费吹灰之力

你也可以探索Managing Secrets with Vault

【讨论】:

  • 是的,使用 shell 脚本是一条出路。
猜你喜欢
  • 1970-01-01
  • 2022-11-24
  • 2017-11-25
  • 2019-03-06
  • 2020-02-24
  • 2016-09-13
  • 1970-01-01
  • 2012-03-20
  • 1970-01-01
相关资源
最近更新 更多