您可以在 Autoconfigured Spring Boot H2 测试数据库上设置兼容模式吗?

Posted

技术标签:

【中文标题】您可以在 Autoconfigured Spring Boot H2 测试数据库上设置兼容模式吗?【英文标题】:Can you set the compatibility mode on the Autoconfigured Spring Boot H2 test DB? 【发布时间】:2019-11-13 21:13:23 【问题描述】:

有没有办法为 H2 数据库配置 H2 兼容模式,Spring Boot 可以自动配置以替换您的常规数据库而不只是替换它?

有文档记录的方法可以禁用自动配置测试数据库替换: https://***.com/a/43557541/141042

我不介意做这样的事情,但大多数替代方案都有其他复杂性:

如果您在测试类路径中添加application.properties,这会在测试运行期间替换您的主要application.properties,因此您将无法维护两个文件(例如https://github.com/spring-projects/spring-boot/issues/10271) 如果您为测试运行设置了配置文件,那么您必须确保任何需要测试数据库的测试都使用配置文件进行标记

有没有更好的方法来做到这一点?我喜欢 Spring Boot 自动配置测试数据库的简单性,但现在我似乎必须强制它进入 mysql 兼容模式才能继续使用我现有的迁移。

那么是吗:

    当 spring 自动配置测试数据库而不禁用该机制时配置 h2 兼容模式的方法? 一种为所有测试指定 jdbc url 的方法,无需修改每个测试(例如包含配置文件)或维护两个应用程序属性文件(例如 src/test/resources 中的新 application.properties

【问题讨论】:

【参考方案1】:

没有选项可以为 Spring Boot 在您的测试中替换的嵌入式数据源设置自定义 URL。我们提供了一种方法来指定您想要的连接类型,但不包括 URL 本身。我不知道我们可以添加它有多容易,但至少值得一看,我创建了issue #19038

至于指定 URL,由于您提到的原因,您不应该在测试类路径中添加 application.properties。您已经引用的 SO 线程 has an answer 引用了 application-test.properties

【讨论】:

当然,application-test.properties 工作正常,只是它要求您使用配置文件注释每个测试,这很容易错过。因此,如果我创建了一个测试并且我没有对其进行注释(或从一个有注释的类继承),我又会遇到迁移错误。如果那是最好的路径,那就是最好的路径,但它仍然比我想要的摩擦力更大。无论如何,感谢您的建议,很高兴确认没有我缺少的选项。 不用担心。考虑到您的描述“我不介意做这样的事情”,这条评论让我有点困惑。我错过了其他方式吗? 不,我只是希望我错过了另一种方式。我不喜欢使用配置文件进行测试配置是,正如我在问题中所说,“如果您为测试运行设置配置文件,那么您必须确保任何需要测试数据库的测试都标有轮廓”。我要替换的自动配置会自动用于所有测试,所以如果有办法修改/配置它,而不是添加一种我必须记住应用的新配置,那对我更有吸引力。但如果这不是一个选项(似乎不是),那么使用测试配置文件就足够了。

以上是关于您可以在 Autoconfigured Spring Boot H2 测试数据库上设置兼容模式吗?的主要内容,如果未能解决你的问题,请参考以下文章

spring mvc中的多个视图解析器

无法验证提供的 CSRF 令牌,因为找不到您的会话

Sprin Boot无RunWith注解解决办法

我正在尝试在我的 sprin 启动应用程序中应用 auth0 安全性,但它会引发错误

cas完全是sprin框架写的么

Sprin学习一