Spring JPA整合PostgreSQL报错:无法加载org.postgresql.Driver
异常根因定位
从异常堆栈的最底层根因来看,报错的直接触发点是Hikari数据源初始化时,执行驱动类校验逻辑抛出Cannot load driver class: org.postgresql.Driver——也就是说Spring在当前运行时类路径下找不到PostgreSQL的JDBC驱动类,导致数据源Bean创建失败,连锁引发JPA配置类的依赖注入失败。
结合你贴出的POM和配置文件,可定位到两类问题:
直接触发类加载失败的诱因
- 你在POM中为postgresql依赖设置了
runtime作用域,这类作用域的依赖在以下场景会被排除出运行时类路径:- 本地Maven仓库中postgresql对应的jar包下载损坏,文件大小远小于正常大小,实际类文件缺失
- 多模块项目中,postgresql依赖被全局排除规则拦截,没有传递到当前启动模块的依赖链路中
- IDE的运行配置没有正确纳入runtime范围的依赖,部分旧版IDE配置在运行Spring Boot应用时会误裁剪runtime类路径
- 由于你没有给postgresql依赖显式指定版本,完全依赖Spring Boot父工程的依赖管理兜底,如果自定义的父POM、BOM导入逻辑覆盖了postgresql的坐标版本,拉取到了不存在的版本号,也会导致类加载失败
配置文件的潜在错误(驱动问题修复后依然会引发异常)
你的application.properties存在两处明显的书写错误:
- 出现了笔误生成的无效配置项
spring.jpa.database-platform.hibernate.ddl-auto=none,这个配置键完全不符合Spring Boot的配置规范,不会被任何组件解析 - 配置逻辑存在冲突倾向:已经显式设置了
spring.jpa.hibernate.ddl-auto=create,如果误把上面那行笔误修正为正确的spring.jpa.hibernate.ddl-auto=none路径,就会出现同一配置项重复赋值的冲突
排查修复步骤
按操作优先级排序:
- 验证依赖加载链路
- 在项目根目录执行
mvn dependency:tree,在输出结果中搜索postgresql,确认该依赖正常存在于当前模块的依赖树中,没有被排除规则过滤 - 找到本地Maven仓库下postgresql依赖的存储路径,检查对应jar包的文件大小(正常jar包大小在1MB以上,如果文件仅几KB即为下载损坏,删除对应目录后重新执行Maven依赖拉取即可)
- 如果是在IDE环境启动,重新加载Maven项目、新建独立的Spring Boot启动配置,避免旧配置的类路径裁剪问题;可临时把postgresql依赖的scope从
runtime修改为compile做验证,确认能正常启动后再改回runtime(Spring Boot打可执行jar时会正确包含runtime范围的依赖,临时改scope只是为了快速验证类路径问题)
- 在项目根目录执行
- 清理错误的配置项
删除那行笔误生成的无效配置,修正后的有效配置如下:spring.datasource.driver-class-name=org.postgresql.Driver spring.datasource.url=jdbc:postgresql://localhost:5432/estudos spring.datasource.username=postgres spring.datasource.password=postgres spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect spring.jpa.generate-ddl=false spring.jpa.hibernate.ddl-auto=create spring.jpa.properties.hibernate.show_sql=true spring.jpa.properties.hibernate.format_sql=false - 启动校验
确认本地PostgreSQL服务正常启动、端口为5432、存在名为estudos的数据库、账号密码匹配配置项后,重启应用即可完成数据源和JPA的初始化。
内容的提问来源于stack exchange,提问作者André Luís Oliveira
相关产品推荐
相关产品推荐

