我正在研究一个项目,它使用不同的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-插件也没有帮助-至少我还没有发现如何将它与gradle一起使用,如果可能的话。
所以我的问题是,我需要检查服务是否正确地保存了数据,但是我不能在内存中这样做,因为H2不支持语法,而且我不允许使用“真实”MySQL数据库,因为我们的所有测试必须与“真实”连接分离,并且在必要时只能在内存存储中用于数据库。

最佳答案

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

10-07 13:12
查看更多