我通过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
文件中的参数?
2条答案
按热度按时间3z6pesqy1#
我假设您将.env文件放在项目目录的顶部,您可以添加以下配置来从.env文件中读取变量
332nm8kg2#
不,不支持。我会说,读取
.env
文件不是Sping Boot 的工作。这是您的shell环境(即bash
,zsh
)或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,因此它只存在于工作进程的内存中。