在 Spring Boot 中使用 dotenv 文件

Posted

技术标签:

【中文标题】在 Spring Boot 中使用 dotenv 文件【英文标题】:Using dotenv files with Spring Boot 【发布时间】:2020-02-21 06:22:29 【问题描述】:

我想使用 dotenv 文件来配置我的 Spring Boot 应用程序。

最好的方法是什么?

在Ruby 或Node 世界中,我只是创建.env 文件并将所有内容从那里加载到应用程序环境。

我不喜欢为我的应用等创建单独的配置文件。我只想将我在文件中指定的任何环境变量加载到我的应用中。

【问题讨论】:

【参考方案1】:

实际上有一个'dotenv'工具的java端口。

https://github.com/cdimascio/dotenv-java

【讨论】:

嗯,它与 ruby​​ 和节点世界中的 dotenv 家伙做的工作不同。首先,它不能在进程中注入环境变量,原因很简单——JVM 禁止这样做(github.com/cdimascio/java-dotenv#faq)其次,它没有与 Spring Boot 集成。我将为此编写解决方法,稍后将使用完整的解决方案编辑答案。顺便说一句,它不支持针对不同环境(开发、生产等)的不同 .env 文件。 Java 世界很艰难。 请注意,您可以通过使用 java-dotenv 的“文件名”属性为每个环境使用不同的 .env 文件。话虽如此,更广泛的 dotenv 社区建议每个环境使用一个 .env 文件【参考方案2】:

我已经在 Spring 和 dotenv 之间建立了适当的集成。

关注thread 了解动机。然后查看库:

在此处查看 spring-dotenv 库:https://github.com/paulschwarz/spring-dotenv

该库包含一个示例应用程序来向您展示如何使用它,您会看到与 Spring 的集成非常自然:

https://github.com/paulschwarz/spring-dotenv/tree/master/application/src/main/resources

我在设计这个库时坚持了两个原则:

    https://12factor.net/config 让您的代码完全不知道 dotenv,以便您继续使用常规 Spring 技术引用您的 application.yml/application.properties 文件。没什么好笑的。

【讨论】:

【参考方案3】:

在 spring boot 中只需在 application.yml 中执行此操作

---
spring:
    config:
      import: optional:file:.env[.properties]

username: $USERNAME

或者如果你使用 application.properties

spring.config.import=optional:file:.env[.properties]
username=$USERNAME

然后@value 和所有其他东西都会起作用

【讨论】:

以上是关于在 Spring Boot 中使用 dotenv 文件的主要内容,如果未能解决你的问题,请参考以下文章

dotenv 是什么 怎么使用

dotenv:在 nestjs 项目中找不到命令

在 .env (dotenv) 文件中使用 PHP 函数

如何在 Vue.js 中使用 dotenv

dotenv 在生产中需要 .env 文件

NPM库:dotenv,从文件加载环境变量