gpt4 book ai didi

spring-boot - Spring Boot 应用程序找不到 SQLite jdbc 驱动程序类

转载 作者:行者123 更新时间:2023-12-05 03:32:49 27 4
gpt4 key购买 nike

在我的 Spring boot 应用程序中,我指定了对 sqlite jdbc 驱动程序的依赖:

<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.34.0</version>
</dependency>

在 pom.xml 属性中

<hibernate.version>5.1.0.Final</hibernate.version>

并在我的 application.properties 中包含以下内容:

spring.jpa.database-platform=com.springboot.sqlite.SQLDialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.defer-datasource-initialization = true

spring.datasource.url = jdbc:sqlite:cryptobot.db
spring.datasource.driver-class-name = org.sqlite.JDBC

我提供的 SQLDialect 类是从 this article 复制而来的.但是运行应用程序失败了

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unsatisfied dependency expressed through method 'entityManagerFactory' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'entityManagerFactoryBuilder' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unsatisfied dependency expressed through method 'entityManagerFactoryBuilder' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaVendorAdapter' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.JpaVendorAdapter]: Factory method 'jpaVendorAdapter' threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/jpa/HibernatePersistenceProviderat org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800) ~[spring-beans-5.3.13.jar:5.3.13]at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:541) ~[spring-beans-5.3.13.jar:5.3.13]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) ~[spring-beans-5.3.13.jar:5.3.13]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) ~[spring-beans-5.3.13.jar:5.3.13]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.13.jar:5.3.13]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.13.jar:5.3.13]at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.13.jar:5.3.13]at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.13.jar:5.3.13]at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.13.jar:5.3.13]at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.13.jar:5.3.13]at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1154) ~[spring-context-5.3.13.jar:5.3.13]at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:908) ~[spring-context-5.3.13.jar:5.3.13]at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.13.jar:5.3.13]at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730) ~[spring-boot-2.6.1.jar:2.6.1]at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:412) ~[spring-boot-2.6.1.jar:2.6.1]at org.springframework.boot.SpringApplication.run(SpringApplication.java:302) ~[spring-boot-2.6.1.jar:2.6.1]at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301) ~[spring-boot-2.6.1.jar:2.6.1]at org.springframework.boot.SpringApplication.run(SpringApplication.java:1290) ~[spring-boot-2.6.1.jar:2.6.1]at com.binance.bot.BinancebotApplication.main(BinancebotApplication.java:10) ~[classes/:na]

这里出了什么问题?

最佳答案

这个主要问题是您通过 pom.xml 中的以下配置明确配置为使用 Hibernate 5.1.0

<hibernate.version>5.1.0.Final</hibernate.version>

太旧了(6年前发布的),spring-boot 2.6.1已经长期不支持了。

从技术上讲,spring-boot 2.6是基于spring 5.3,spring 5.3是针对Hibernate 5.3+开发和测试的,尽量在运行时向后兼容Hibernate 5.2。您可以在 HibernateJpaVendorAdapter 的 javadoc 中找到此类信息还有这个issue .

它尝试加载 org.hibernate.jpa.HibernatePersistenceProvider在某些时候,但此类只存在于 Hibernate 5.2 之后。由于您现在使用的是 Hibernate 5.1,因此它提示无法加载它并出现以下错误:

[org.springframework.orm.jpa.JpaVendorAdapter]: Factory method'jpaVendorAdapter' threw exception; nested exception isjava.lang.NoClassDefFoundError:org/hibernate/jpa/HibernatePersistenceProvider

所以干脆去掉上面的<hibernate.version>pom.xml这样它将使用 spring-boot 2.6.1 定义的 hibernate 5.6.1 然后你的问题应该得到解决。为新项目使用非常旧的 Hibernate 版本没有意义。

关于spring-boot - Spring Boot 应用程序找不到 SQLite jdbc 驱动程序类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70404755/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com