| | |
| | | |
| | | 三条由此推出的硬约束: |
| | | |
| | | - **迁移必须同时兼容 5.7 与 8.0**:测试只在 8.0 上跑,跑绿不代表开发库能执行(`V148` 的存储过程写法 |
| | | - **迁移必须同时兼容 5.7 与 8.0**:测试只在 8.0 上跑,跑绿不代表开发库能执行(`V151` 的存储过程写法 |
| | | 已在 5.7 上实跑验证过,但每次新增迁移都值得照做一遍)。 |
| | | - **开发库的结构不由 Flyway 维护**:缺表缺列只能靠启动时的初始化器 best-effort 补,补不上就手工补(见下)。 |
| | | - 本机 `8134` 实例上另有 `talent_card`、`talent_card_dryrun`、`talent_card_verify1` 三个库:它们是 |
| | |
| | | 逐条执行 SQL(默认连开发库,可 `-Database/-DatabaseHost/-Port` 覆盖;不带 `-Yes` 只打印不执行)。 |
| | | 它认得 `DELIMITER`,所以 `db/migration/V*.sql` 也能原样重放。默认指向**开发库**,别拿它去改测试库 |
| | | (测试库由 Flyway 从 `db/migration` 重建,手工 DDL 会让迁移与 history 表对不上)。 |
| | | 开发者首次拿到新列:2026-09-17 的 `V149`(支付流水两列)与 `V150`(手输核销码计数表)就是这样落地的, |
| | | 对应脚本 `scripts/dev-schema-v149-payment-attempt.sql`(写法可重复执行的那份在迁移里,两者等价)。 |
| | | 开发者首次拿到新列:2026-09-17 的 `V152`(支付流水两列)与 `V153`(手输核销码计数表)就是这样落地的, |
| | | 对应脚本 `scripts/dev-schema-v152-payment-attempt.sql`(写法可重复执行的那份在迁移里,两者等价)。 |
| | | - 动结构之前先备份。本机**没有** mysql 客户端、也没有 Docker(README 里指向 `D:\MySQL\...` 和 |
| | | `docker exec talent-card-mysql-1` 的两条老做法都已失效),要备份就在 DB 主机上做,或照 |
| | | `scripts/reset-test-db.ps1` 的办法用项目已有的 JDBC 驱动写个单文件程序。 |
| | |
| | | 的回退在途)状态。以后新写这类「后台任务只处理了我这条」的用例,照它的做法先腾窗口,不要再依赖测试库的 |
| | | 累积状况。 |
| | | |
| | | ## 测试库跑不起来时,先看 WSL(2026-09-17 实测) |
| | | |
| | | 测试库那个 8.0.36 实例跑在 **WSL 的 docker 里**(发行版 `Ubuntu-26.04`,容器 `talent-card-mysql-1`, |
| | | `127.0.0.1:8134->3306`)。WSL 虚拟机会在空闲时自己关掉,容器跟着停——于是测试全部报 |
| | | |
| | | ``` |
| | | Unable to obtain connection from database: Communications link failure |
| | | Caused by: java.net.ConnectException: Connection refused: getsockopt |
| | | ``` |
| | | |
| | | 或者更绕的一句(连接失败被 Hibernate 翻译过之后的表象): |
| | | |
| | | ``` |
| | | Unable to determine Dialect without JDBC metadata (please set 'jakarta.persistence.jdbc.url' ...) |
| | | ``` |
| | | |
| | | 判断与恢复: |
| | | |
| | | ```bash |
| | | wsl.exe -d Ubuntu-26.04 -u root -- docker ps # 容器在不在 |
| | | wsl.exe -d Ubuntu-26.04 -u root -- docker start talent-card-mysql-1 talent-card-redis-1 |
| | | ``` |
| | | |
| | | **光起容器不够**:跑测试期间要有东西把 VM 挂住,否则命令一返回、VM 又空闲关掉,测试照样撞在停机缝里 |
| | | (现象是容器每次 `docker ps` 都显示 `Up 2 seconds`)。用一个长命进程持有它,跑完再结束: |
| | | |
| | | ```bash |
| | | wsl.exe -d Ubuntu-26.04 -u root -- bash -lc "sleep 1800" # 后台挂着,测试跑完再停 |
| | | ``` |
| | | |
| | | 本机 Windows 侧没有 mysqld、没有 Docker——**别在 Windows 里找 8.0 实例**,它只在 WSL 里。 |
| | | |
| | | ## 测试库的状态是共享的 |
| | | |
| | | Spring 测试共用一个 schema,测试之间不做清理(没有 `@Transactional` 回滚)。因此: |