如何配置Helidon MP应用在集成测试中使用内存数据库?
Helidon MP应用:实现运行与测试环境的数据库配置切换
我们正在搭建一个连接SQL数据库并提供CRUD接口的Helidon MP应用,集成测试阶段需要满足运行时使用真实SQL数据库,测试时使用内存数据库的需求。
尝试过的四种方案
- 方案1:尝试通过依赖注入容器修改ORM(Hibernate)配置以使用内存数据库,未成功;
- 方案2:在测试目录配置独立的
persistence.xml覆盖主目录文件,使用不同jta-data-source区分连接凭证,但引发依赖冲突导致失败; - 方案3:在主目录
persistence.xml中新增不同名称的持久化单元,手动创建EntityManagerFactory,尝试失败; - 方案4:保留方案3的
persistence.xml,实现EntityManager提供类注入两个持久化单元的EntityManager,通过测试类的@AddConfig切换,但该方案会建立两个数据库连接,不够理想。
最终解决方案:Maven构建阶段触发配置文件切换
创建development、tests、production三个配置目录,每个目录下存放对应环境的专属配置文件(如persistence.xml)。借助maven-resources-plugin在不同构建阶段自动复制对应目录的配置文件:
compile阶段:复制development目录的配置文件到编译输出目录test-compile阶段:复制tests目录的配置文件到测试编译输出目录prepare-package阶段:复制production目录的配置文件到打包目录
通过这种方式,无需修改代码即可实现不同环境的数据库配置自动切换,测试阶段会自动使用内存数据库的配置,运行或生产阶段则使用真实SQL数据库的配置。
内容的提问来源于stack exchange,提问作者Irimia Ionut
相关产品推荐
相关产品推荐

