本项目使用 SQLite 单文件部署,数据库升级由 DatabaseInitializer 和 DatabaseMigrationRunner 分工完成。
backend/src/main/resources/schema.sql:新库全量建表脚本,只使用 CREATE TABLE IF NOT EXISTS / CREATE INDEX IF NOT EXISTS。DatabaseInitializer:启动时执行 PRAGMA 和全量建表脚本。DatabaseMigrationRunner:启动时创建 schema_migration 表,并按版本执行旧库兼容迁移。schema_migration:记录已应用版本,避免重复执行同一迁移。DatabaseMigrationRunner#migrations() 末尾追加新的 DatabaseMigration。columnExists,新增表和索引用 IF NOT EXISTS。DatabaseInitializer 里写兼容 ALTER TABLE。./scripts/backup-db.sh。Database migration N applied。SQLite 对部分 DDL 回滚能力有限。生产回退不依赖“反向迁移”,而是使用停服备份恢复:
./scripts/restore-db.sh <backup-file>。cd backend
mvn -q -Dtest=DatabaseMigrationRunnerTest,PerformanceLifecycleIntegrationTest test
mvn -q test