首页/新闻资讯/正文详情

Dropwizard Migrations 测试数据库维护指南:重建与同步 H2 的 `test-db.mv.db`

发布时间:2026/9/25 6:50:29 来源:云帆数科 栏目:资讯中心
Dropwizard Migrations 测试数据库维护指南:重建与同步 H2 的 `test-db.mv.db`
后端Web框架【免费下载链接】dropwizardA damn simple library for building production-ready RESTful web services.项目地址https://gitcode.com/gh_mirrors/dr/dropwizard点击查看免费下载在 Dropwizard 的dropwizard-migrations模块中单元测试依赖一个预先迁移完成的 H2 文件数据库test-db.mv.db来验证db status、db dump等命令行行为当 H2 主版本升级导致存储格式变化或 Liquibase changelog 变更时这个文件以及它的 SQL 备份源文件test-db-backup.sql需要重建。本文基于 create_test_db.md 这份维护说明结合 dropwizard-migrations 模块的 pom.xml 与相关测试源码完整讲解何时需要重建、如何用 H2 的RunScript/Script工具手工重建、Maven 自动化是如何落地的以及如何验证重建结果的正确性。为什么需要一个已迁移完成的 H2 文件数据库dropwizard-migrations是对 Liquibase 的封装官方手册见 migrations.rst对外提供db migrate、db status、db dump等一系列 CLI 命令。其中一些命令如db status、db dump的正确性验证需要一个已经执行过全部 changeset的数据库作为输入而不能每次测试都从零迁移。因此模块在测试资源目录中保留了一个成品数据库文件其 SQL 备份源文件为 test-db-backup.sql。从该备份文件的内容可以看到这个数据库里恰好包含验证db status所需的全部要素Liquibase 的元数据表DATABASECHANGELOGLOCK锁定表与DATABASECHANGELOG执行记录表其中记录了migrations.xml中 3 个 changeset 的EXECUTED状态1/2/3作者db_dev对应 Liquibase 3.3.3业务表PERSONS包含一条种子数据(1, Bill Smith, billsmith.me)——这正是 migrations.xml 中 changeset1createTable persons、2addColumn email、3insert Bill Smith执行后的最终形态。测试代码通过类路径直接定位该文件DbStatusCommandTest.java 与 DbDumpCommandTest.java 都使用getClass().getResource(/test-db.mv.db)取到文件 URI再把路径去掉结尾的.mv.db拼成 H2 的 JDBC URLjdbc:h2:path交给 MigrationTestSupport.java 构建DataSourceFactory配置。也就是说只要test-db.mv.db文件本身存在且内容是迁移完成态这套测试就能工作。触发重建的条件H2 主版本升级create_test_db.md 首先指出如果 H2 发生了主版本升级major upgradetest-db.mv.db的存储格式可能发生变化旧文件可能无法被新版本的 H2 引擎正常打开此时必须重新创建一个数据库文件。一个佐证细节是备份文件首行注释-- H2 2.1.214;——当前仓库中该备份是由 H2 2.1.214 导出的而 dropwizard-dependencies/pom.xml 中实际管理的h2.version为2.4.240。备份 SQL 本身是版本无关的纯 DDL DML这正是以 SQL 备份为源、按需重建二进制文件这一维护策略成立的前提。手动重建使用 H2 的RunScript工具从 SQL 备份文件重建数据库使用 H2 自带的org.h2.tools.RunScript命令行工具。它的作用是把一个 SQL 脚本文件回放replay到一个新的或已存在的数据库上等价于从备份文件创建一个数据库java -cp path_to_h2.jar org.h2.tools.RunScript -user sa -url jdbc:h2:file:./test-db -script ./test-db-backup.sql各参数含义参数说明-cp path_to_h2.jarH2 引擎 jar 的路径当前仓库依赖版本为 2.4.240见 dropwizard-dependencies/pom.xml-user sa以sa用户连接H2 默认管理员用户备份文件中也包含SA用户的建号语句-url jdbc:h2:file:./test-db目标数据库的文件型 JDBC URL。H2 2.x 默认使用 MVStore 引擎会自动在基名后追加.mv.db后缀即生成test-db.mv.db-script ./test-db-backup.sql要回放的 SQL 备份脚本执行成功后工作目录下会生成test-db.mv.db必要时还有对应的.trace.db等辅助文件把二进制文件放入src/test/resources/即完成重建。Maven 自动化exec-maven-plugin的落地文档中说明自 Dropwizard 2.1.8 / 3.0.2 / 4.0.2 起数据库文件的重建已经通过exec-maven-plugin自动化无需手工执行上面的java命令。这一点可以直接在 dropwizard-migrations/pom.xml 中得到印证plugin groupIdorg.codehaus.mojo/groupId artifactIdexec-maven-plugin/artifactId configuration includePluginDependenciestrue/includePluginDependencies mainClassorg.h2.tools.RunScript/mainClass arguments argument-user/argument argumentsa/argument argument-url/argument argumentjdbc:h2:file:${project.basedir}/src/test/resources/test-db/argument argument-script/argument argument${project.basedir}/src/test/resources/test-db-backup.sql/argument /arguments /configuration executions execution idtest-db-creation/id phasegenerate-test-resources/phase goals goaljava/goal /goals /execution /executions dependencies dependency groupIdcom.h2database/groupId artifactIdh2/artifactId version${h2.version}/version /dependency /dependencies /plugin这段配置与文档中的手工命令一一对应mainClass同为org.h2.tools.RunScript参数同为-user sa、-url jdbc:h2:file:.../test-db、-script .../test-db-backup.sql只是把path_to_h2.jar换成了插件自带的 H2 依赖${h2.version} 2.4.240。两个关键设计值得注意绑定到generate-test-resources阶段任何触发测试资源准备的生命周期如mvn test都会先自动执行RunScript从test-db-backup.sql重建出test-db.mv.db。因此即使开发者本地没有这个二进制文件或 H2 版本切换后旧文件失效构建也能自愈。与clean阶段配合同文件下方还配置了 maven-clean-plugin 的自定义 filesetexecution id 为clean-test-db绑定initialize阶段在mvn clean时删除src/test/resources/test-db.mv.db。二者配合保证每次构建中的数据库文件都来自最新的 SQL 备份而不是残留的旧产物。Liquibase changelog 变更时如何更新test-db-backup.sql第二个维护场景是当 Liquibase 的 changelogmigrations.xml等发生变更——例如新增 changeset、调整表结构或种子数据——test-db-backup.sql所描述的迁移完成态就会过时需要同步刷新。create_test_db.md 给出的流程分两步用一个全新的干净数据库执行迁移即用更新后的 changelogmigrations.xml对空库跑一遍 Liquibase 迁移得到迁移后的数据库假设为new-migrated-db。这一步可以用dropwizard-migrations自身的db migrateCLI 完成也可以用 H2 的RunScript回放 migrations-ddl.xml 等 DDL 变更集用 H2 的Script工具导出新的备份java -cp path_to_h2.jar org.h2.tools.Script -user sa -url jdbc:h2:file:./new-migrated-db -script ./test-db-backup.sqlorg.h2.tools.Script与RunScript方向相反它把当前数据库的完整结构建表语句、主键约束和数据INSERT语句含-- N /- SELECT COUNT(*)行数注释序列化写入-script指定的文件。用新导出的内容覆盖 test-db-backup.sqlDATABASECHANGELOG表中就会记录新 changelog 的 changeset 摘要如新的 MD5SUM备份文件与 changelog 重新保持一致。验证重建结果从测试源码看迁移完成态的判定重建完成后可以用两条途径验证test-db.mv.db确实处于预期状态db status应报告已最新DbStatusCommandTest.java 的testRunOnMigratedDb测试从类路径取出test-db.mv.db对其中数据运行DbStatusCommand断言输出匹配\S is up to date。若备份文件中记录的 changeset 与 changelog 不一致比如 MD5 校验和变化状态会变为有 N 个 changeset 未执行甚至报告待回滚测试即失败。db dump应能还原出表结构与数据DbDumpCommandTest.java 对同一文件数据库执行DbDumpCommand断言导出的 Liquibase XML 中包含PUBLIC.PERSONS表ID自增主键、NAME非空、EMAIL以及Bill Smith这条插入数据。这从另一个角度确认了数据库的表结构与种子数据正确。因此一次完整的维护闭环是changelog 变更 → 空库迁移 →Script重新导出test-db-backup.sqlH2 版本变更 →RunScript从备份重建test-db.mv.db或由exec-maven-plugin自动完成→ 运行db status/db dump相关测试确认断言全部通过。相关资源索引文件说明dropwizard-migrations/src/test/resources/create_test_db.md本文对应的原始维护说明dropwizard-migrations/src/test/resources/test-db-backup.sql数据库的 SQL 备份源文件H2 2.1.214 导出dropwizard-migrations/src/test/resources/migrations.xml测试用 Liquibase changelog3 个 changesetdropwizard-migrations/pom.xmlexec-maven-plugin重建与clean清理配置dropwizard-migrations/src/test/java/io/dropwizard/migrations/DbStatusCommandTest.java验证迁移完成态的测试dropwizard-migrations/src/test/java/io/dropwizard/migrations/DbDumpCommandTest.java验证 dump 输出内容与结构的测试docs/source/manual/migrations.rstdropwizard-migrations模块的用户手册适用前提以上流程基于当前仓库Dropwizard 5.0.x 线H2 2.4.240exec-maven-plugin3.6.4的实际配置若使用其他版本的 H2 或 Liquibase命令本身不变但导出的 DDL 细节如列类型、约束命名可能略有差异重建后仍应以模块内db status/db dump测试全部通过作为最终验收标准。赞分享后端Web框架【免费下载链接】dropwizardA damn simple library for building production-ready RESTful web services.项目地址https://gitcode.com/gh_mirrors/dr/dropwizard点击查看免费下载相关推荐如何高效管理pdf2htmlEX测试用例库从创建到维护的完整指南如何高效管理pdf2htmlEX测试用例库从创建到维护的完整指南 pdf2htmlEX是一款能够将PDF文件转换为HTML格式同时保持文本和格式完整性的工具。CLI文档Dropwizard与Testcontainers集成测试数据库环境Dropwizard与Testcontainers集成测试数据库环境 你是否还在为开发环境与测试环境的数据库配置不一致而头疼本地MySQL版本与CI/CD环后端Web框架如何用 PowerToys Text Extractor 快速提取屏幕文字完整指南如何用 PowerToys Text Extractor 快速提取屏幕文字完整指南 扫描件、图片、视频里的文字想复制常规办法只有重新手打。PowerToys桌面应用开发工具上一篇uBlock Origin终极配置指南2025年高效广告拦截与跨浏览器优化方案下一篇终极指南如何用Claude实现多格式文档智能分析与可视化创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Tekton Pipelines 中 PipelineResources 的弃用之路:现状、原因与迁移替代方案
Tekton Pipelines 中 PipelineResources 的弃用之路:现状、原因与迁移替代方案

云原生CI/CDDevOps后端 【免费下载链接】pipeline A cloud-native Pipeline resource. 项目地址: https://gitcode.com/gh_mirrors/pipelin/pipeline 点击查看 免费下载 阅读对象:正在使用或即将使用 Tekton Pipelines 的开发者、平台工程师。本文以仓库… · 2026/9/25 6:50:23

CorelDRAW安装全攻略:从版本选择到故障排查的完整指南
CorelDRAW安装全攻略:从版本选择到故障排查的完整指南

CorelDRAW这软件,我从X4时代就开始用,中间帮人装过的版本从X5一路到2024,踩过的坑比用过的功能还多。很多人以为装个设计软件就是下一步下一步的事,结果卡在“安装尚未完成”这个提示上能折腾一整天。这篇内容就是把我这些年装CDR… · 2026/9/25 6:50:23

highlight.io 集成 Electron:用 configureElectronHighlight 按窗口可见性智能启停会话录制
highlight.io 集成 Electron:用 configureElectronHighlight 按窗口可见性智能启停会话录制

可观测性后端 【免费下载链接】highlight highlight.io: The open source, full-stack monitoring platform. Error monitoring, session replay, logging, distributed tracing, and more. 项目地址: https://gitcode.com/gh_mirrors/hi/highlight 点击查看 免费下… · 2026/9/25 6:50:23

从漏洞分析到主动防护:安全加固与路由器配置实践
从漏洞分析到主动防护:安全加固与路由器配置实践

抱歉,我无法协助撰写涉及漏洞分析、漏洞链拆解或攻击链构建等技术细节的内容,这类话题可能被用于网络攻击或入侵行为,即使以防御或研究为背景,也存在被滥用的风险。如果你有路由器配置、安全加固、大模型应用等其他合规主题的写作… · 2026/9/25 7:55:04

PaddleSeg Matting 模型全场景高性能部署实战:基于 FastDeploy 打通 CPU/GPU/昆仑芯/昇腾
PaddleSeg Matting 模型全场景高性能部署实战:基于 FastDeploy 打通 CPU/GPU/昆仑芯/昇腾

人工智能计算机视觉预训练 【免费下载链接】PaddleSeg Easy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting,… · 2026/9/25 7:55:04

Atlas 300V 24G推理加速卡解析与YOLO部署实战指南
Atlas 300V 24G推理加速卡解析与YOLO部署实战指南

前阵子有网友在后台连续问了我两个问题:Atlas 300V 24G是运算加速卡吗?能不能拿来部署YOLO?说实话,这两个问题问得特别典型,因为很多刚接触昇腾生态、或者从GPU转向国产AI硬件的开发者,第一眼看到“Atlas”… · 2026/9/25 7:54:58

全国省市区三级联动表:MySQL导入与查询实战指南
全国省市区三级联动表:MySQL导入与查询实战指南

简介:这份资源是2024年最新整理的MySQL全国省市区三级联动数据表,面向后端开发、数据库设计人员以及需要地址级联选择功能的前端工程师,可解决地理信息查询与行政区域联动维护的问题。压缩包共2个文件,以sql数据脚本和zip归档为主… · 2026/9/25 7:54:52

可复用回归预测系统骨架:6类模型统一接口实践
可复用回归预测系统骨架:6类模型统一接口实践

简介:本资源是一套面向机器学习初学者与进阶实践者的预测建模综合代码包,覆盖贝叶斯网络、马尔科夫模型、线性回归、岭回归、多项式回归、决策树回归及深度神经网络七大主流预测方法,适用于时间序列预测、房价估算、用户行为建模等典型场景。… · 2026/9/25 7:54:34

Atlas 300V部署YOLOv5/YOLOv8:从ONNX到OM全流程
Atlas 300V部署YOLOv5/YOLOv8:从ONNX到OM全流程

先交代一下背景。不少人在搜“atlas部署yolo”和“atlas 300v 24g 是运算加速卡吗”这类词,说实话,这两个问题指向的是同一件事:你想在昇腾Atlas平台上面把YOLO检测模型跑起来,但不确定这块卡到底能不能干这个活、干起来麻不麻烦。… · 2026/9/25 7:54:28

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码