我在执行junit测试时,使用schema.sql文件创建sql模式时遇到了一些问题,而此模式包含mysql特定表达式。我必须将mode=mysql
添加到H2 url。
例如:jdbc:h2:mem:testd;MODE=MYSQL
但是Sping Boot 会自动使用在枚举org.springframework.boot.autoconfigure.jdbc.EmbeddedDatabaseConnection中定义的url及其urljdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
的值。该值为
我已经尝试过类似的方法来实现这个功能,但是Spring并没有从我的www.example.com中获取spring.datasource.url=jdbc:h2:mem:testdb;MODE=MYSQL
。test-application.properties
如果我让spring/hib在我的实体中创建带有javax.persistence注解的模式(不使用schema.sql文件),一切都可以正常工作。
有没有一种简单的方法来添加模式?
6条答案
按热度按时间sq1bmfud1#
设置
字符串
在application-test.properties,加上
型
在测试课上
o4hqfura2#
我也遇到了同样的问题。在运行测试时,它不会拾取URL。我使用flyway来管理我的脚本。我能够通过以下几个步骤让所有这些工作在一起。
在src/test/resources/db/migration中创建了一个
V1_init.sql
脚本,使其成为flyway运行的第一个脚本。字符串
更新了
application-test.yaml
以包含架构名称public:型
确保测试指定了配置文件:
@ActiveProfiles("test")
oaxa6hgo3#
我已经尝试过类似的方法来让它工作,但是spring并不需要spring。test-application.properties
你有没有尝试附加这个参数而不是重写现有的参数?
字符串
已成功读取我的test-application.properties中的所有其他设置。
我认为这个文件应该命名为
application-test.properties
。50pmv0ei4#
您需要在h2上设置
MYSQL
模式,并禁用嵌入式数据库的URL替换:修改
application-test.yaml
字符串
kadbb4595#
我可以用这个配置运行它:
字符串
这里的主要技巧是强制Hibernate为MariaDB方言生成SQL脚本,因为否则Hibernate会尝试使用H2方言,而H2已经在等待类似MySQL的命令。
另外,我尝试在MariaDB 10.3中使用更新鲜的
MariaDB103Dialect
,但它不能正常工作。nbysray56#
问题是大小写敏感。我可以以同样的方式运行liquibase init,但在jpa脚本上失败了,因为找不到模式。如果你使用
MODE=MYSQL
,模式是以全大写创建的,所以为了在测试中重用相同的h2(由liquibase初始化),那么你需要确保模式是以全大写定义的。字符串