温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
Tic现在只有一份简单配置文件,要升级到完整外部化配置。先问一个更根本的问题,为什么同一个这儿要能跑开发、测试和生产?因为交付物应该是同一个构件。代码不变,只有配置随环境变化。如果每个环境重新打包,测试过的jar和生产跑的已经不是同一个东西。那properties ya ML、环境变量、命令行参数这么多,来源到底怎么选?我们是不是得先背下整张优先级表?优先级只是结果,不是目的。工程上先建立类型,安全配置类,用at configuration properties绑定,再加validation,让配置错误在启动时就暴露。部署时,我们用环境变量覆盖数据库地址,用启动参数覆盖端口。文件负责默认值,环境负责差异,这样同一个这儿才能直接上线。那密码和token也放配置文件里吗?如果提交到仓库,风险太大了。
01:06
普通配置可以进文件,Secret必须走环境变量或密钥管理系统。配置类里只放非敏感项,敏感项单独注入,避免泄露。所以核心不是被优先级,而是把配置当接口,代码依赖配置契约环境提供实现。我们用一个属性做覆盖实验验证一下。给同一个属性分别设置文件值、环境变量值和启动参数值,启动后打印最终取值。观察谁生效,但重点理解为什么需要这种覆盖能力。如果环境变量和启动参数同时存在,会不会出现运维改了环境变量,但启动脚本里还残留旧参数,导致排查困难?所以生产环境要固定覆盖策略,比如只用环境变量,启动参数只用于本地调试。
02:01
规则越少,台账越快。最小落地,先建一个类型,安全配置类加校验,再把数据库地址和端口改成环境变量覆盖。同一个罩儿,从开发一路跑到生产,配置差异留在环境里。
我来说两句