
多环境配置治理开发、测试、生产连接信息如何隔离应用接入数据库后最怕的不是配置多而是配置混。开发环境连到了测试库测试任务误写了生产库生产密码提交到代码仓库本地调试用了高权限账号——这些问题一旦发生影响往往比普通 Bug 严重得多。本文围绕金仓数据库应用接入场景讲清楚 Windows 11 本地开发、测试环境、生产环境之间的连接配置如何隔离避免环境串线和密码裸奔。文章目录多环境配置治理开发、测试、生产连接信息如何隔离一、多环境混乱的典型问题二、推荐的配置文件结构三、用 profile 明确启动环境四、不同环境使用不同账号五、不同环境使用不同数据库或 Schema六、禁止把生产密码提交到仓库七、启动时校验目标环境八、连接池参数也要分环境九、多环境发布检查清单十、小结一、多环境混乱的典型问题其实咱们平时遇到的事故往往往往仅仅只是这么几种情况开发人员在自己电脑的application.yml里头直接写了生产库的地址。这是一个问题。测试环境拿去用了生产的账号这个也是经常发生的。生产的密码跑到 Git 仓库的历史记录里去了。好几个环境都共用同一个数据库账号。那出了事你想查来源根本查不出来。本地弄的一些临时配置稀里糊涂就打进生产包里了。连接池的参数在哪个环境都一模一样。那生产环境的连接预算就很容易失控了。那么这些问题出现了。你光靠嘴上提醒大家是没用的。那要怎么解决呢原因在于你得从配置结构和权限边界上去管。二、推荐的配置文件结构通常来说一个 Spring Boot 项目我建议你最起码得拆成这几个文件application.yml application-dev.yml application-test.yml application-prod.yml那个application.yml里头呢其实就放点公共的配置就行了spring:application:name:kb-app-demoserver:port:8080接着咱们看开发环境# application-dev.ymlspring:datasource:url:jdbc:kingbase8://192.168.10.101:54321/kb_app_devusername:app_user_devpassword:App_user_dev_123hikari:pool-name:kb-dev-poolmaximum-pool-size:5minimum-idle:1那测试环境的话# application-test.ymlspring:datasource:url:jdbc:kingbase8://192.168.10.102:54321/kb_app_testusername:app_user_testpassword:App_user_test_123hikari:pool-name:kb-test-poolmaximum-pool-size:20minimum-idle:5到了生产环境# application-prod.ymlspring:datasource:url:${KB_DB_URL}username:${KB_DB_USER}password:${KB_DB_PASSWORD}hikari:pool-name:kb-prod-poolmaximum-pool-size:${KB_DB_POOL_MAX:30}minimum-idle:${KB_DB_POOL_MIN_IDLE:5}这里我得重点提一句。生产环境里你千万、千万不要把真实的密码写死在配置文件里头。三、用 profile 明确启动环境本地开发java-jar kb-app-demo.jar--spring.profiles.activedev测试环境java-jarkb-app-demo.jar--spring.profiles.activetest生产环境exportKB_DB_URLjdbc:kingbase8://10.10.20.15:54321/kb_appexportKB_DB_USERapp_user_prodexportKB_DB_PASSWORD生产密码exportKB_DB_POOL_MAX30exportKB_DB_POOL_MIN_IDLE5java-jarkb-app-demo.jar--spring.profiles.activeprod建议启动日志打印当前 profileimportorg.springframework.core.env.Environment;importorg.springframework.stereotype.Component;importorg.springframework.boot.ApplicationArguments;importorg.springframework.boot.ApplicationRunner;ComponentpublicclassProfileLoggerimplementsApplicationRunner{privatefinalEnvironmentenvironment;publicProfileLogger(Environmentenvironment){this.environmentenvironment;}Overridepublicvoidrun(ApplicationArgumentsargs){System.out.println(active profiles: String.join(,,environment.getActiveProfiles()));}}如果生产环境启动时没有明确 profile应当直接失败而不是使用默认配置悄悄启动。四、不同环境使用不同账号不要让开发、测试、生产共用同一个数据库账号。建议至少区分环境示例账号用途开发app_user_dev本地开发联调测试app_user_test测试环境验证生产app_user_prod生产业务访问报表report_user_prod生产只读查询这样做有几个好处数据库侧可以根据账号判断访问来源。某个环境账号泄漏不会直接影响其他环境。权限可以按环境收敛。审计日志更容易分析。五、不同环境使用不同数据库或 Schema如果资源允许开发、测试、生产应该使用不同数据库实例或不同数据库。至少也要使用不同 Schema避免对象混用。例如开发库kb_app_dev 测试库kb_app_test 生产库kb_app不要在同一个生产库里用test_前缀表做开发测试。临时表、测试数据、误操作都可能影响生产。六、禁止把生产密码提交到仓库建议在.gitignore中排除本地私有配置application-local.yml .env *.secret如果历史上已经提交过生产密码不能只删除当前文件——Git 历史里仍然存在。应该立即更换密码并按企业安全流程清理仓库历史中的敏感信息。生产密码应该来自环境变量。配置中心。密钥管理系统。容器编排平台的 Secret。不要通过微信群、文档截图、代码注释等途径传播生产密码。七、启动时校验目标环境为了防止应用连错库可以在启动时校验当前数据库名和用户。importjava.util.Map;importorg.springframework.boot.ApplicationArguments;importorg.springframework.boot.ApplicationRunner;importorg.springframework.core.env.Environment;importorg.springframework.jdbc.core.JdbcTemplate;importorg.springframework.stereotype.Component;ComponentpublicclassDatabaseEnvCheckerimplementsApplicationRunner{privatefinalJdbcTemplatejdbcTemplate;privatefinalEnvironmentenvironment;publicDatabaseEnvChecker(JdbcTemplatejdbcTemplate,Environmentenvironment){this.jdbcTemplatejdbcTemplate;this.environmentenvironment;}Overridepublicvoidrun(ApplicationArgumentsargs){StringprofileString.join(,,environment.getActiveProfiles());MapString,ObjectrowjdbcTemplate.queryForMap(select current_database() as db_name, current_user as user_name);System.out.println(profileprofile, dbrow.get(db_name), userrow.get(user_name));}}生产环境可以进一步做强校验如果prodprofile 下连接的不是生产库名或生产账号应用直接启动失败。八、连接池参数也要分环境开发环境可以小maximum-pool-size:5minimum-idle:1测试环境可以接近压测maximum-pool-size:20minimum-idle:5生产环境根据压测和连接预算配置maximum-pool-size:${KB_DB_POOL_MAX:30}minimum-idle:${KB_DB_POOL_MIN_IDLE:5}不要让开发配置带到生产也不要让生产连接池参数在开发环境里制造不必要连接。九、多环境发布检查清单检查项要求profile启动命令明确指定数据库地址与目标环境一致数据库名开发、测试、生产隔离数据库账号不同环境不同账号密码来源生产不写入代码仓库连接池参数按环境配置启动自检打印脱敏环境信息权限边界生产账号最小权限日志不打印密码十、小结多环境配置治理的目标是让连错库变得困难让密码泄漏更容易被发现让连接来源可以追踪。配置文件分层、profile 管理、账号隔离、环境变量注入和启动自检是应用接入金仓数据库必须建立的基本工程规范。下一篇我们继续看账号和权限把应用账号、报表账号、运维账号分层设计清楚。