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

标签 mysql spring embedded-database h2db

我正在从事一个使用不同 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/

相关文章:

php - 在表中列出结果 - While 循环并在 TD 中列出结果

PHP如何显示基于部门的总数据

java - 从 Spring Cloud Config Server 获取配置时 Spring 配置文件排序不正确

java - Spring Cloud Zuul : Apply filter only to specific route

.net - 基于文件系统的 Sql 数据库的选项,用于可以执行和扩展的多用户 Web 应用程序

Java 嵌入式数据库比较

java - 使用存储在嵌入式 Derby 数据库中的初始数据部署 Java 应用程序

php - 电影院/电影院的调度系统 - 多个放映时间

mysql - 如何查询mysql match must contain a and b boolean

java注解判断被注解的方法是否执行