spring 在Sping Boot 中从application.yml阅读.env文件参数?

nc1teljy  于 2023-03-22  发布在  Spring
关注(0)|答案(2)|浏览(229)

我通过IntelliJ运行配置将一些敏感数据作为环境变量传递:

spring:
...
  datasource:
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://localhost:5432/${DB_NAME}
    username: ${DB_USERNAME}
    password: ${DB_PASSWORD}

然而,我想知道是否有可能从.env文件中读取并匹配这些标签,而不通过IntelliJ或命令行传递它们。在docker-compose中,据我所知,可以使用env_file参数。应用程序属性是否有类似的事情,通过给定其位置来读取并匹配.env文件中的参数?

3z6pesqy

3z6pesqy1#

我假设您将.env文件放在项目目录的顶部,您可以添加以下配置来从.env文件中读取变量

...
spring:
    config:
        import: optional:file:.env[.properties]
...
332nm8kg

332nm8kg2#

不,不支持。我会说,读取.env文件不是Sping Boot 的工作。这是您的shell环境(即bashzsh)或IDE的工作(有corresponding plugins for Intellij
但是正如我所看到的,您通过引入自己的env变量并将其Map到Sping Boot 属性来做一些不必要的工作。这是不必要的,因为每个Spring Boot属性的值可以通过相应的uppercased环境变量传递和识别。(请参阅此文档部分)。这意味着如果您想将spring.datasource.password属性的值传递给Sping Boot ,你可以在SPRING_DATASOURCE_PASSWORD环境变量中输入一个值来启动应用程序。
此外,我看不出在使用Sping Boot 开发应用程序时使用.env文件的任何理由。在您的src/resources/application.yaml中,只需设置spring.profiles.active: secrets并将您的敏感数据(您不想提交)放入application-secrets.yaml(这是.gitignore d以避免意外提交)
请注意,理想情况下,在部署应用程序时,您也不应该将机密保存在文件中。您应该在应用程序的进程启动时注入它们as environment variable,因此它只存在于工作进程的内存中。

相关问题