Spring Boot w/o starter-parent pom 不加载 jdbc 驱动程序

Posted

技术标签:

【中文标题】Spring Boot w/o starter-parent pom 不加载 jdbc 驱动程序【英文标题】:Spring Boot w/o starter-parent pom not loading jdbc driver 【发布时间】:2015-07-14 00:29:39 【问题描述】:

我的 Spring-Boot 服务器使用“starter-parent”pom 运行良好。问题是,如果可能的话,我宁愿不使用 spring pom 作为父级。当我只包含 spring-boot-dependencies pom 时(如here 所述),我最终没有加载驱动程序:

18:14:26.127 [localhost-startStop-1] WARN  o.a.t.jdbc.pool.PooledConnection - Not loading a JDBC driver as driverClassName property is null.
18:14:26.147 [localhost-startStop-1] ERROR o.a.tomcat.jdbc.pool.ConnectionPool - Unable to create initial connections of pool.
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/mydb
  at java.sql.DriverManager.getConnection(DriverManager.java:689) ~[na:1.8.0_45]
  at java.sql.DriverManager.getConnection(DriverManager.java:208) ~[na:1.8.0_45]
  at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:305) ~[tomcat-jdbc-8.0.23.jar:na]
  at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:200) ~[tomcat-jdbc-8.0.23.jar:na]
  ...

我很确定这与 DriverManager 和 ServiceLoader 位未加载驱动程序有关,但我不确定如何强制这种情况发生。任何建议将不胜感激。

FWIW:如果我尝试“Class.forName()”MySQL jdbc 驱动程序,我实际上会得到一个“NoClassDefFoundError”,这令人费解,因为 mysql-connector 肯定在我的 pom.xml 中。多个类加载器之类的?

【问题讨论】:

为什么你不想使用'spring-boot-starter-parent'作为父母?它引起的任何问题都比忽略它引起的问题更容易解决。 我公司有一个父 pom,它配置了许多插件以与我们的构建系统正确集成。我可以在一个新的 pom 中复制所有这些,但我不想这样做。 【参考方案1】:

我相信我的问题与 maven 如何导入与继承依赖项有关,这些依赖项由我公司的父 pom 提供,以及那些与 spring-boot 一起提供的。我无法真正解释它,但如果我注释掉父 pom 的依赖管理部分,一切似乎都正常工作。这绝对是某种神秘的 maven 行为,但现在我正在努力分离父 pom.xml 的依赖管理和插件配置方面。这样我可以继承插件配置,而不是依赖管理。

感谢您的帮助:)

【讨论】:

以上是关于Spring Boot w/o starter-parent pom 不加载 jdbc 驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 学习例子

Spring Boot 2Spring Boot CLI

为啥 Spring Boot 应用程序 pom 同时需要 spring-boot-starter-parent 和 spring-boot-starter-web?

《02.Spring Boot连载:Spring Boot实战.Spring Boot核心原理剖析》

spring-boot-quartz, 依赖spring-boot-parent

spring-boot系列:初试spring-boot