SpringBoot2.x使用H2作为单元测试的hibernate.dialect问题

场景

在开发过程中,需要使用MySQL进行测试,但是在进行单元测试时,希望使用H2数据库进行。但是当在项目中自定义了JPAConfig类后,使用MySQL跑单元测试正常,但是当使用dev、test环境进行配置,并将单元测试的配置文件指定为test之后,会出现hibernate.dialect以及读取不到H2的SQL语句文件等错误。

配置文件

集成JPA时,可以自定义配置文件JPAConfig,在文件中使用自定义Bean来完成配置;也可以不用配置文件,直接在application.properties文件中对JPA进行相关配置。如果使用前者,可支持的自定义属性会相对更多,但是一些默认的配置会优先加载配置文件中的,如果配置文件中没有,则会报错。而且配置文件在有多种类型数据源的情况时,并不能适配使用,同样会引起报错。

解决

方案一:

删除JPAConfig配置文件,因为该文件中并没有太多的定制化配置,直接在properties文件中进行JPA的配置同样可行,这样还能解决以上出现的问题。但是如果自定义配置文件中有较多的定制化配置,那么需要采用方案二。

方案二:

在JPAConfig配置文件上添加@Profile("dev")注解,标识此配置类为dev环境下的。单元测试指定配置文件为test后,不会使用此配置文件。

此外,在这过程中,还需要搜索并配置hibernate.dialect,在Springboot2.x以后,配置的方式为:spring.jpa.database-platform,H2的方言为org.hibernate.dialect.H2Dialect,MySQL的方言为org.hibernate.dialect.MySQL5InnoDBDialect

发布了24 篇原创文章 · 获赞 14 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/biubiu2it/article/details/102728824
今日推荐