Spring Boot:无法加载驱动程序类:org.hsqldb.jdbcDriver。

10

我有一个简单的Spring Boot应用程序(通过Spring Roo生成)。

数据库配置如下:

spring.datasource.driver-class-name=org.hsqldb.jdbcDriver
spring.datasource.url=jdbc\:hsqldb\:mem\:PetClinic
spring.jpa.hibernate.naming.strategy=org.hibernate.cfg.ImprovedNamingStrategy
spring.messages.encoding=ISO-8859-1
spring.messages.fallback-to-system-locale=false
spring.thymeleaf.mode=html

这里是我声明HSQLDB依赖项的方法:

<dependency>
  <groupId>org.hsqldb</groupId>
  <artifactId>hsqldb</artifactId>
  <scope>provided</scope>
</dependency>

当我启动应用程序时,我收到以下错误:

Caused by: java.lang.IllegalStateException: Cannot load driver class: org.hsqldb.jdbcDriver
    at org.springframework.util.Assert.state(Assert.java:392) ~[spring-core-4.3.3.RELEASE.jar:4.3.3.RELEASE]
    at org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.determineDriverClassName(DataSourceProperties.java:214) ~[spring-boot-autoconfigure-1.4.1.RELEASE.jar:1.4.1.RELEASE]

Spring-boot-autoconfigure模块尝试使用ClassUtils实用程序类加载当前上下文类。

我想知道这种方法是否有效,因为我使用的是负责加载Maven依赖项的Tomcat容器? 即使在libs目录中有JAR文件,为什么Spring仍然无法找到它?

3个回答

9
  1. 从你的pom.xml中删除<scope>provided</scope>
  2. 从你的应用程序属性中删除spring.datasource.driver-class-namespring.datasource.url属性

因为:

  • 当提供spring.datasource.url时,驱动程序类名是多余的,因为Spring Boot会自动尝试加载正确的驱动程序。
  • 由于您想使用嵌入式数据库,所以根本不需要提供spring.datasource.url。只需要在类路径上有一个嵌入式数据库JAR(例如HSQLDB)即可。

相关文档片段:

Spring Boot可以自动配置嵌入式H2、HSQL和Derby数据库。 您不需要提供任何连接URL,只需包含要使用的嵌入式数据库的构建依赖项即可。

请阅读Spring Boot文档中的Working with SQL databases部分。我说的一切都在那里提到了,所以你可以获得更多细节。


我正在使用Gradle,并且在我的build.gradle中有implementation 'org.hsqldb:hsqldb:2.6.1',但仍然遇到此错误。 - harsha kumar Reddy

6

我看到你提供了<scope>provided</scope>范围,但我不认为Tomcat会默认提供hsqldb.jar。

所以,请尝试删除provided范围。


0

尝试在您的pom.xml中使用以下依赖项配置(根据需要更改版本号或删除它)

<dependency>
   <groupId>org.hsqldb</groupId>
   <artifactId>hsqldb</artifactId>
   <classifier>jdk8</classifier>
   <version>2.6.1</version>        
</dependency>

对我来说,添加分类器行解决了一个问题。 请参见下面在hsqldb存储库中的建议。 https://sourceforge.net/p/hsqldb/bugs/1644/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接