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



我有一个简单的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 容器? 为什么即使 JAR 在库目录中 Spring 也找不到它?

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

因为:

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

相关文档代码段:

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

请阅读 Spring 引导文档中的 使用 SQL 数据库 部分。我所说的一切都在那里提到,所以你可以得到更多的细节。

我看到你给出的范围是提供的,<scope>provided</scope>,我不认为 Tomcat 提供了开箱即用的 hsqldb.jar。

因此,请尝试删除提供的范围。

尝试在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/

最新更新