基于 mysql 数据库的 spring 项目, sql 有 H2 不支持的语法,怎么高效搞连接数据库的功能测试?

2021-06-21 19:01:02 +08:00
 shadowfish0

为了兼容 H2 改 SQL 是肯定不可能的吧,项目本来就是准备移植过来的,老的 SQL 有些很长完全不敢改。弃用 H2,直接连远程数据库(因为要在阿里云流水线上跑测试,只能要不 H2 要不连远程数据库),又非常慢,咋办呢?

项目是用 mybatis 的,暂时想到的办法是能不能动态切换下 sql 语句,遇到不支持的语法就换一个数据库来跑,又不知道具体咋实现...而且还不能影响到生产环境,生产环境肯定是一直要跑 mysql 的。

查了好多教程,基本都是基于 xml 的,我不喜欢那种格式,就想着用注解实现

1980 次点击
所在节点    程序员
16 条回复
linbiaye
2021-06-21 19:02:46 +08:00
profile + 本地 mysql 服务器
yuk1no
2021-06-21 19:15:57 +08:00
testcontainers
coer
2021-06-21 21:41:11 +08:00
mariadb4j 啊
fewok
2021-06-22 01:15:45 +08:00
mybatis 插件
RichardYyf
2021-06-22 01:27:18 +08:00
testcontainers 真的无敌
vveexx
2021-06-22 08:58:13 +08:00
silencil
2021-06-22 08:59:50 +08:00
H2 不是有兼容 MySQL 语法吗? url 尾部接“;MODE=MYSQL”;是不是这个支持的还不行?
jorneyr
2021-06-22 09:17:04 +08:00
使用 databaseId 标记 Mapper 中的 SQL 语句,有问题的那条语句提供 MySQL 和 H2 的版本,参考下面这种样式:

<select id="getAllProduct" resultType="product" databaseId="pg">
SELECT * FROM product
</select>
Vegetable
2021-06-22 09:50:16 +08:00
看你们测试怎么跑的吧,方案很多。CI 里起单独的空 mysql 实例,本地可以使用 docker-compose 拉起一个空 mysql
shadowfish0
2021-06-22 10:35:19 +08:00
@jorneyr 这样会不会影响到生产的配置?感觉会影响到...
shadowfish0
2021-06-22 10:36:03 +08:00
@silencil 还不行,sql 里面用了很多 IF 啥的 Mysql 支持的函数
shadowfish0
2021-06-22 10:36:53 +08:00
@vveexx 这个我试过了,扔在阿里云流水线跑测试比直接远程数据库都慢一倍以上,都不知道为啥了
shadowfish0
2021-06-22 10:38:12 +08:00
@RichardYyf 这个咋配置鸭,我不太懂 docker,这个是一定要 docker 才能运行吗?项目本身没跑在 docker 下..网上方法简单试了下,不行,好像就是 docker 配置的问题
jorneyr
2021-06-22 12:51:40 +08:00
@shadowfish0 不会
vveexx
2021-06-22 13:19:03 +08:00
@shadowfish0 初始化的时候会下载个 mysql 然后本地启动。跑流水线的机器如果配置太低,确实会慢...
shadowfish0
2021-06-22 23:04:44 +08:00
感谢,这种方法成功了!好像有些 hxd 收藏了这个回答,我这里给出两个有用的博文
https://blog.csdn.net/qq_31324077/article/details/103387825
https://blog.csdn.net/xuanzhangran/article/details/60329357

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/784898

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX