如何在Spring Boot中集成Dotenvx保护你的配置项?
Josh Long在This Week in Spring - September 2nd, 2025推荐了dotenvx-spring-boot, 在文中还有一篇非常好的ppt,就是12-Factor Apps with Spring Boot,
this is really cool - a mechanism to load configuration into Spring Boot using Dotenvx Andrew Fawcett gave a nice talk looking at building 12-factor applications with Spring Boot at Spring I/O 2025.
所以我们来看一下如何在Spring Boot中集成Dotenvx。
Andrew Fawcett的演讲中谈到,12-Factor App的Config配置项,在Spring Boot中也非常容易实践,如下:
至少我个人也是遵循这样的做法,有条件的话就上Vault或者其他Config Server,没有条件的个人项目,就使用.env
文件进行环境变量暴露。
对于企业来说,基本上都需要使用到Vault、Config Server等配置中心,来管理应用的配置,尤其是一些敏感信息,如数据库密码、API Key等, 如果使用Vault话的话,不用担心,Vault就是KMS产品,如果是Config Server的话,还需要考虑配置的加密问题。 当然获取Vault或Config Server中的配置,还是需要安全的,如API Key等,还需要提供其他的信息,如Group, AppName, Profile等, 确保拿到的配置是正确的。
Dotenvx的出现,让配置管理更简单,你只要通过dotenvx的非对称加密对application.properties
文件进行加密,
加密后的application.properties
文件可以直接放在代码仓库中,或者打包到应用中,部署到服务器上,都没有问题,没有私钥是无法解密这些数据的,
你可以放心地存储敏感信息,如数据库密码、API Key等,典型格式如下:
在部署的时候,我们只需要提供一个项目基本的DOTENV_PRIVATE_KEY
环境变量,然后Spring Boot应用在启动的时候就会自动加载.env
文件中的配置,
并且解密这些加密的配置,然后将这些配置加载到Spring Boot的环境变量中,供应用使用。
对比一下KMS/Config Server和Dotenvx的一些异同:
- API Key或者Private Key: 这两者没有区别,都是不可能匿名去访问Vault,总是需要一个凭证的。不同的是,Dotenvx的private key是项目级别的,即便泄露,爆炸半价也比较小,而且你可以快速修改配置,然后轮换秘钥重新加密即可。
- 配置存储:Git是最好的存储配置的地方,Git有版本管理、权限控制等功能,这些使用Git仓库提供的权限即可。如果是KMS等,API Key,ACL,版本控制等,都需要自己实现。你要关注API Key的管理的项目半径,如果一个API能访问多个项目的配置,API Key泄露后,基本是灾难性的。
- 成本和稳定性:KMS基本上都是收费的,价格可以说非常昂贵。即便是开源的Config Server,也要部署3台以上的服务器,来保证高可用,应用在启动时,Config Server不可用,这个也是灾难性的故障。Dotenvx没有这些问题,配置随代码部署,只需要一个private key即可,成本为零。
- 配置推送:KMS/Config Server可以实现配置的动态推送,Dotenvx不支持配置的动态推送,应用需要重启才能加载新的配置。对于大多数应用来说,这个并不是问题,毕竟配置变更并不是很频繁。如果你需要动态推送配置,我开发了一个Dotenvx + NATS的解决方案,非常轻量级。
综合下来,Dotenvx可以更优雅地解决应用配置的问题,你基本上不在需要专有的KMS/Config Server了,尤其是对于中小型企业和个人开发者来说,Dotenvx可以大大简化配置管理的复杂度,还保护了你的配置,最后是成本几乎为零。
在Spring Boot中集成Dotenvx非常简单,你只需要添加dotenvx-spring-boot-starter
依赖,如下:
<dependency>
<groupId>org.mvnsearch</groupId>
<artifactId>dotenvx-spring-boot-starter</artifactId>
<version>0.1.2</version>
</dependency>
那么如何在application.properties
中添加和维护加密配置项呢?考虑到大多数Java开发人员都是使用IntelliJ IDEA,
所以下载并安装IntelliJ dotenvx plugin插件,
你不用脱离IDE就可以完成Dotenvx的所有工作:创建key pair, 加密配置,修改配置,配置项inlay hints等,保证你的使用体验。
你不用给application.properties
中所有配置项都加密,只需要加密敏感信息即可。配置项加密后,你直接提交到git仓库中,
此外你也不用担心各种AI插件和工具会读取你的敏感信息,因为这些信息都是加密的,即便到了AI服务商那边,也是无法解密的,这个完全可以放心。
更多信息请访问:dotenvx-spring-boot