沉溺于追求物质享受,就等于给飞鸟的双翅系上了黄金——佚名
直接改依赖:
<!--<dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>${h2.version}</version> <scope>test</scope> </dependency>--> <dependency> <groupId>org.hsqldb</groupId> <artifactId>hsqldb</artifactId> <version>2.7.1</version> <scope>test</scope> </dependency>
随便运行一个test
报错:
这里提到了关键字:TestDatabaseAutoConfiguration
我们进入org.springframework.boot.test.autoconfigure.jdbc.TestDatabaseAutoConfiguration$EmbeddedDataSourceFactory.getEmbeddedDatabase(TestDatabaseAutoConfiguration.java:191)
发现这里连接为空才会抛异常
那我们ctrl+f8
断点打在if
这里,shift+f9
来debug
一下
发现进入了EmbeddedDatabaseConnection.get
F7
再回车,深入get
方法,发现这里的逻辑是如果driverClass
存在,则返回对应的连接枚举EmbeddedDatabaseConnection
,我们等待hsql
的driverClass
驱动
f7
看下ClassUtils.isPresent
,发现是forName
按下f8
发现直接到抛出异常返回false
了,此时我们丢帧
回到了外面
再按下f7
进去,ctrl+w
选中forName
和参数,按下alt+f8
,发现了真正的报错
1 |
org/hsqldb/jdbc/JDBCDriver has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0 |
大概意思就是说不支持当前java
版本了
我们换个早一点的依赖试试:
<dependency> <groupId>org.hsqldb</groupId> <artifactId>hsqldb</artifactId> <version>2.5.2</version> <scope>test</scope> </dependency>
成功运行下来
之后的报错就很容易解决了,是原来H2
的ddl(Data Definition Language)
的COMMENT
关键字不支持,我们用正则替换掉
ctrl+r
打开替换框,alt+x
打开正则模式,输入正则后,按下alt+a
替换全部
// 以COMMENT开头,直到遇到","为止,我们这里替换为空即可 COMMENT[^,]+ COMMENT[^,]*
我们再试试另一个正则
// 以[ COMMENT ' ]开头,以'结尾,我们这里替换为空即可 COMMENT '.*'
再次运行,发现不支持NULL DEFAULT xxx
格式,替换掉DEFAULT
前面的NULL
再次运行,发现不支持无SQL
不执行查询,而是会报错
而且不支持CASE field WHEN conditionValue THEN actualValue
的语法
因此换回H2
了,ctrl
+alt
+z
,选择pom.xml
,按下alt+r
或者直接回车