gpt4 book ai didi

mysql - Spring 中在 H2 数据库上集成测试 MySQL 语法的问题

转载 作者:行者123 更新时间:2023-11-29 01:15:56 28 4
gpt4 key购买 nike

我正在从事一个使用不同 MySQL 模式进行客户管理的项目,例如每个客户都有自己的数据库架构,该架构是使用骨架模板创建的。

对于兼容性问题,我必须从 Java 创建新的 MySQL 模式,这在以前是用 PHP 完成的。我创建了一个小型服务类,它通过重复使用 CREATE TABLE 'a' LIKE 'b'; 在 MySQL 数据库上完美运行,但是这不适用于 H2db,因为 H2 不支持 >LIKE - 创建表时的部分。然后我创建了一个 MySQL 并修改了文件以便用 Java 轻松处理(Files.readAllLines,它被馈送到 Statement.executeBatch)。但是,由于像 COLLATION=UTF8 这样的语句,此转储在 H2db 上也会失败。遗憾的是,拥有这些很重要,因为我们经常有需要正确编码的特殊字符,所以不建议简单地从 sql 文件中删除所述语句。

我像这样初始化数据源:

public DataSource dataSource(ResourceLoader resourceLoader) {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.setScriptEncoding("UTF-8")
.addScript("data.sql").build();
}

所以,我的配置可能性很少。我们使用 gradle 来构建我们的应用程序,因此建议的 maven-plugin 也无济于事 - 至少我还没有发现如何将它与 gradle 一起使用,如果可能的话。

所以我的问题是,我需要检查服务是否真的正确保存了数据,但我无法在内存中执行此操作,因为 H2 不支持该语法,而且我不允许使用“真实的”MySQL 数据库,因为我们所有的测试都必须脱离“真实的”连接,并且如有必要,只能使用内存中的数据库存储。

最佳答案

我最终使用了 https://github.com/vorburger/MariaDB4j作为嵌入式数据库,因为我们无论如何都使用 MariaDB,所以这肯定会消除所有方言问题。由于这与嵌入式 MongoDB 的工作方式相同,因此额外的测试成本是可以接受的。

但要注意:这需要 64 位操作系统才能工作。

关于mysql - Spring 中在 H2 数据库上集成测试 MySQL 语法的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40288127/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com