mysql - 在内存数据库中使用 mySQL 进行 Hibernate spring 单元测试

标签 mysql spring hibernate dao in-memory-database

我刚刚看到一篇文章,我们可以使用 HSQLDB 来执行此操作,但我正在考虑在内存数据库中使用 mySQL 测试我的 DAO,因为行为因数据库而异。谁能告诉我该怎么做?

谢谢

最佳答案

我将 H2 用于单元/集成测试以及开发 - 速度更快并且不依赖于任何外部。 MySQL 是我的生产数据库。这就像一场完美的婚姻......

... 直到并发开始,并且数据库开始表现不同。

每个数据库都有自己的事务隔离策略 - 大多数情况下,测试适用于 MySQL 而不是 H2。例如,H2 仅支持超时仅为 1,000 毫秒的表锁定——因此导致某些线程失败,因此我的测试不稳定。

有多种方法可以单独配置 H2(查看 H2's transaction isolation levels),但是我还没有测试 MVCC 选项。

我会及时通知你。

附言。故事的寓意 - 创建并发集成测试!


更新:有效!我创建了如下数据源:

final DriverManagerDataSource ds = new DriverManagerDataSource();
ds.setDriverClassName("org.h2.Driver");
ds.setUrl("jdbc:h2:~/testdb;MVCC=TRUE");
ds.setUsername("sa");
ds.setPassword("sa");       
return ds;

MVCcflags就像一个魅力,但是我在使用内存中 h2:mem 时遇到了一些问题,因为它在每个连接中都是易变的(因此,每当 Hibernate 重新尝试连接时,模式就会被清除).我不得不退回到基于文件的数据库(这对我来说不是什么大问题)。

关于mysql - 在内存数据库中使用 mySQL 进行 Hibernate spring 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16986513/

相关文章:

java - Spring 在手动类实例化期间注入(inject)@Autowired 字段

java - Hibernate:未知的mappedBy in:,引用的属性未知:

mysql - 频繁写作的栏目越少越好吗? mysql

mysql - MySQL UNION 多个表,但只返回 1 个结果,为什么?

php - php mysql中基于 session 的登录表单

java - 如何获取 Thymeleaf 模板中环境变量的值?

java - spring boot jpa无法创建表

mysql - 如何将 SQL 映射到 Liquibase XML 标记

mysql - Hibernate MySQLMyISAMDialect 不起作用?

spring - ConstraintValidator 依赖注入(inject)在类级别验证时会导致 ValidationException