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

时间:2017-08-22 22:28:08

标签: spring spring-boot

我有一个简单的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也无法找到它?

2 个答案:

答案 0 :(得分:4)

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

请尝试删除提供的范围。

答案 1 :(得分:3)

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

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

    相关文档摘要:

      

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

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