【发布时间】:2016-10-27 15:05:24
【问题描述】:
我正在开展一个项目,该项目使用不同的 MySQL 模式进行客户管理,例如每个客户都有自己的数据库架构,它是使用骨架模板创建的。
出于兼容性问题,我必须从 Java 创建新的 MySQL 模式,这在 PHP 之前已经完成。我创建了一个小型服务类,它通过重复使用CREATE TABLE 'a' LIKE 'b'; 在 MySQL 数据库上完美运行,但是这不适用于 H2db,因为 H2 在创建表时不支持 LIKE-part。然后我创建了一个 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 数据库,因为我们所有的测试都必须与“真正的”连接分离,并且在必要时只能使用内存中的数据库存储。
【问题讨论】:
标签: mysql spring embedded-database h2db