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

Ste*_*chs 2 mysql spring embedded-database h2db

我正在开发一个使用不同MySQL模式进行客户管理的项目,eG每个客户都有自己的数据库模式,该模式是使用骨架模板创建的.

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

我像这样初始化DataSource:

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

所以,我的配置可能性很少.我们gradle用来构建我们的应用程序,所以建议的maven-plugin也无济于事 - 至少我还没有找到使用它gradle,如果可能的话.

所以我的问题在于,我需要检查服务是否真正保持数据正确,但我无法在内存中执行,因为H2不支持语法,我不允许使用"真正的"MySQL数据库,因为我们所有的测试都必须与"真实"连接分离,并且必要时只能使用数据库的内存存储.

Ste*_*chs 5

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

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