Skip to content

生产环境部署

本文介绍 AutoTable 在生产环境的最佳配置实践。

推荐配置

方案一:validate 模式(推荐)

yaml
auto-table:
  mode: validate
  show-banner: false

效果

  • 启动时校验数据库表结构与实体是否一致
  • 不一致则启动失败,及早发现问题
  • 不执行任何 DDL 语句

适用场景

  • 大多数生产环境
  • 需要确保代码与数据库一致
  • 配合 Flyway/Liquibase 管理变更

方案二:完全禁用

yaml
auto-table:
  enable: false

效果

  • 完全跳过 AutoTable 逻辑
  • 零风险

适用场景

  • 对表结构变更有严格审批流程
  • 完全由 DBA 管理数据库

不推荐的配置

生产环境禁止使用

yaml
auto-table:
  mode: create  # 会删除所有数据!
  mode: update  # 可能产生意外变更
  auto-drop-table: true  # 会删除表!
  auto-drop-column: true  # 会删除字段!

环境隔离

多 Profile 配置

yaml
# application.yml(默认)
auto-table:
  enable: false

---
# application-dev.yml(开发)
auto-table:
  enable: true
  mode: update
  auto-drop-column: true

---
# application-test.yml(测试)
auto-table:
  enable: true
  mode: create

---
# application-prod.yml(生产)
auto-table:
  mode: validate

启动命令

bash
# 开发环境
java -jar app.jar --spring.profiles.active=dev

# 生产环境
java -jar app.jar --spring.profiles.active=prod

与数据库版本管理配合

推荐流程

1. 开发环境使用 AutoTable update 模式快速迭代
2. 使用 AutoTable 的 SQL 记录功能导出变更
3. 将变更 SQL 整理为 Flyway/Liquibase 脚本
4. 生产环境通过 Flyway/Liquibase 执行变更
5. 生产环境 AutoTable 使用 validate 模式校验

SQL 记录配置

yaml
auto-table:
  record-sql:
    enable: true
    record-type: file
    folder-path: ./sql-history
    version: "1.0.0"

监控与告警

启动校验失败告警

在 validate 模式下,结构不一致会抛出异常,可配合监控系统:

java
@Component
public class AutoTableValidateListener implements ValidateFinishCallback {
    
    @Override
    public void validateFinish(boolean status, String dialect, CompareTableInfo info) {
        if (!status) {
            // 发送告警通知
            alertService.send("AutoTable 校验失败:" + info.validateFailedMessage());
        }
    }
}

安全建议

  1. 最小权限原则:生产环境数据库账号只授予 SELECT 权限
  2. 禁用危险配置:确保 auto-drop-* 配置全部为 false
  3. 日志审计:开启 SQL 记录,便于追溯
  4. 灰度发布:先在预发环境验证,再上生产

Released under the Apache 2.0 License.