为了兼容 H2 改 SQL 是肯定不可能的吧,项目本来就是准备移植过来的,老的 SQL 有些很长完全不敢改。弃用 H2,直接连远程数据库(因为要在阿里云流水线上跑测试,只能要不 H2 要不连远程数据库),又非常慢,咋办呢?
项目是用 mybatis 的,暂时想到的办法是能不能动态切换下 sql 语句,遇到不支持的语法就换一个数据库来跑,又不知道具体咋实现...而且还不能影响到生产环境,生产环境肯定是一直要跑 mysql 的。
查了好多教程,基本都是基于 xml 的,我不喜欢那种格式,就想着用注解实现
1
linbiaye 2021-06-21 19:02:46 +08:00
profile + 本地 mysql 服务器
|
2
yuk1no 2021-06-21 19:15:57 +08:00 via iPhone
testcontainers
|
3
coer 2021-06-21 21:41:11 +08:00 via iPhone 1
mariadb4j 啊
|
4
fewok 2021-06-22 01:15:45 +08:00
mybatis 插件
|
5
RichardYyf 2021-06-22 01:27:18 +08:00 via Android
testcontainers 真的无敌
|
6
vveexx 2021-06-22 08:58:13 +08:00
|
7
silencil 2021-06-22 08:59:50 +08:00
H2 不是有兼容 MySQL 语法吗? url 尾部接“;MODE=MYSQL”;是不是这个支持的还不行?
|
8
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> |
9
Vegetable 2021-06-22 09:50:16 +08:00
看你们测试怎么跑的吧,方案很多。CI 里起单独的空 mysql 实例,本地可以使用 docker-compose 拉起一个空 mysql
|
10
shadowfish0 OP @jorneyr 这样会不会影响到生产的配置?感觉会影响到...
|
11
shadowfish0 OP @silencil 还不行,sql 里面用了很多 IF 啥的 Mysql 支持的函数
|
12
shadowfish0 OP @vveexx 这个我试过了,扔在阿里云流水线跑测试比直接远程数据库都慢一倍以上,都不知道为啥了
|
13
shadowfish0 OP @RichardYyf 这个咋配置鸭,我不太懂 docker,这个是一定要 docker 才能运行吗?项目本身没跑在 docker 下..网上方法简单试了下,不行,好像就是 docker 配置的问题
|
14
jorneyr 2021-06-22 12:51:40 +08:00
@shadowfish0 不会
|
15
vveexx 2021-06-22 13:19:03 +08:00
@shadowfish0 初始化的时候会下载个 mysql 然后本地启动。跑流水线的机器如果配置太低,确实会慢...
|
16
shadowfish0 OP 感谢,这种方法成功了!好像有些 hxd 收藏了这个回答,我这里给出两个有用的博文
https://blog.csdn.net/qq_31324077/article/details/103387825 https://blog.csdn.net/xuanzhangran/article/details/60329357 |