在Spring Boot
(2.1.3)项目中,我尝试对内存H2数据库(2.1.210)运行集成测试,还在Spring的data.sql
中插入了一些数据。
我用@AutoConfigureTestDatabase
注解了测试,所有测试都按预期工作。现在我想改变兼容模式,但我找不到这样做的选项。
如果希望AutoConfigureTestDatabase为每个测试创建一个新数据库,如何自定义H2数据库?
到目前为止,我试过:
spring.test.database.replace=none
spring.datasource.url=jdbc:h2:mem;DB_CLOSE_DELAY=1;
但是我遇到了“表已经存在”或“唯一约束违规”,因为系统似乎没有删除数据库,而是在现有数据库的基础上重新执行脚本。https://stackoverflow.com/a/47897350/3429660
我也尝试过不使用AutoConfigureTestDatabase,但我遇到了同样的问题。
1条答案
按热度按时间p8h8hvxi1#
我也遇到过同样的问题,但是找到了解决方案。如果你查看
org.springframework.boot.jdbc.EmbeddedDatabaseConnection#H2
枚举值,你会发现数据源url看起来有点不同示例化测试时,会执行某些逻辑,将'%s'占位符替换为某个UUID值。因此,每个测试都在单独的数据库上执行。要在您的一侧实现相同的逻辑,您可以创建执行相同逻辑的新Bean。
遗憾的是,您必须在测试属性文件中定义所有上述属性。