H2-升级后
Posted
技术标签:
【中文标题】H2-升级后【英文标题】:After H2-Upgrade 【发布时间】:2017-06-13 14:14:37 【问题描述】:我在我的项目中升级了 h2-database,但现在它失败了,出现以下异常:
Caused by: org.springframework.beans.PropertyBatchUpdateException: Failed properties: Property 'driverClassName' threw exception; nested exception is java.lang.IllegalStateException: Could not load JDBC driver class [org.h2.Driver]
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:121) ~[spring-beans-4.2.8.RELEASE.jar:4.2.8.RELEASE]
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:75) ~[spring-beans-4.2.8.RELEASE.jar:4.2.8.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1518) ~[spring-beans-4.2.8.RELEASE.jar:4.2.8.RELEASE]
... 66 common frames omitted
这是我的 spring-context.xml:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="$db.driver" />
<property name="url" value="$db.url" />
<property name="username" value="$db.username" />
<property name="password" value="$db.password" />
</bean>
这里是我的 jdbc.properties,spring-context 加载数据以初始化我的数据源:
db.driver=org.h2.Driver
db.url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1
db.username=sa
db.password=
db.memurl=jdbc:h2:mem:test
在 h2 版本 1.4.179 上一切正常,但在 1.4.196 上失败。使用的 Spring 版本是 4.2.8。
我不明白为什么它会失败...H2 发生了一些变化,但我不知道是什么...有人知道吗?
--更新--
这里是 pom.xml 的所有依赖项(spring-version 是 4.2.8),这是我所有测试依赖项的通用项目(包装是 pom),它被多个项目使用。我使用 h2-database 作为内存数据库仅用于测试:
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.11</version>
<exclusions>
<exclusion>
<artifactId>junit</artifactId>
<groupId>junit</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.196</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>$spring.version</version>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.10.19</version>
</dependency>
</dependencies>
<packaging>pom</packaging>
【问题讨论】:
您能否发布您的pom.xml
或 gradle build 以显示您如何添加依赖项?
我将 pom.xml 添加到初始帖子中。
【参考方案1】:
尝试添加
<scope>runtime</scope>
或
<scope>test</scope>
如果您打算仅使用 h2 进行测试
到h2
依赖
【讨论】:
它找不到依赖关系,因为编译时存在依赖关系(我猜你没有编译错误)。运行时意味着在运行时保持对应用程序 jar 的依赖。 是的,我没有任何编译错误,但我也使用 JPA,所以我不关心使用的数据库。但是为什么随着版本升级行为发生了变化?!因为如果我降级了,一切都会重新工作......它是可复制的。以上是关于H2-升级后的主要内容,如果未能解决你的问题,请参考以下文章
在 oracle 模式下升级 h2 数据库 jar 后选择语句失败
h2 升级到 1.2.147 的问题 - getNString 异常
Nginx 是不是支持以明文形式从 http/1.1 升级 http/2 (h2c)