Skip to content

开发/生产环境

我们日常开发中,会遇到一个问题:生产环境无法通过程序对表结构做自动维护。

原因有很多,数据库账号没有DDL权限、上线流程要求数据库的改动必须走审批、等等......

所以最佳实践方案是:

1、开发环境开启AutoTable,AutoTable运行过程中,自动记录实体变更过程中产生的SQL。

2、然后生产环境关闭AutoTable,上线前研发人员将开发环境中AutoTable记录的SQL递交审批(可自行实现AutoTable的SQL记录接口,自定义记录方案,比如直接对接内部的SQL审计平台)。

3、SQL审批通过,走上线流程。

spring boot 应用

开发环境

yaml
# 开发环境 application-dev.yml
auto-table:
  # 开启自动建表
  enable: true
  record-sql:
    # 开启SQL记录
    enable: true
    # 当前版本(此处可保持与计划上线的版本号一致,方便管理SQL文件)
    version: 1.0.0
    # 记录到数据库(如果是多数据源,则会根据不同数据源,记录到不同的库)
    record-type: db
yaml
# 开发环境 application-dev.yml
auto-table:
  # 开启自动建表
  enable: true
  record-sql:
    # 开启SQL记录
    enable: true
    # 当前版本(此处可保持与计划上线的版本号一致,方便管理SQL文件)
    version: 1.0.0
    # 记录到文件
    record-type: file
    # 文件夹位置
    folder-path: /Users/don/Downloads/sqlLogs

完整配置及介绍见recordSql配置

生产环境

yaml
# 生产环境 application-prod.yml,关闭自动建表
auto-table:
  enable: false

普通 java 应用

开发环境

java
// 配置信息
AutoTableGlobalConfig.PropertyConfig autoTableProperties = new AutoTableGlobalConfig.PropertyConfig();
// 开发环境 启用
autoTableProperties.setEnable(true);
// 记录sql
PropertyConfig.RecordSqlProperties recordSqlProperties = new PropertyConfig.RecordSqlProperties();
recordSqlProperties.setEnable(true);
recordSqlProperties.setRecordType(PropertyConfig.RecordSqlProperties.TypeEnum.db);
recordSqlProperties.setVersion("1.0.0");
autoTableProperties.setRecordSql(recordSqlProperties);
AutoTableGlobalConfig.setAutoTableProperties(autoTableProperties);

生产环境

java
// 配置信息
AutoTableGlobalConfig.PropertyConfig autoTableProperties = new AutoTableGlobalConfig.PropertyConfig();
// 生产环境 关闭
autoTableProperties.setEnable(false);
AutoTableGlobalConfig.setAutoTableProperties(autoTableProperties);