Tomcat 8 上使用 Mybatis、c3p0 启动 webapp 时出错

Error starting webapp with Mybatis, c3p0 on Tomcat 8

我正在尝试在 Tomcat 8 上部署我的 webapp,它使用 Mybatis 3.2.7c3p0 用于连接池以连接到 SQLServer 数据库。我的类路径中有 sqljdbc4.jar。我在 webapp 启动期间查询数据库以获取一些值。

该应用程序在 Tomcat 7 中运行,但是在 Tomcat 8 中,我无法连接到数据库。我使用 eclipse 进行了很多调试,根本原因在 c3p0 中的 BasicResourcePool.class 文件中,它正在等待资源可用,但随后抛出 java.lang.InterruptedException.

因此,Mybatis 抛出 java.SQL.SQLException,因此我的 webapp 无法启动,因为它无法连接到数据库。

有没有人升级到Tomcat8并且成功使用Mybatis-c3p0了?如果是,我是不是遗漏了什么?

解决了这个问题。这是 JDBC 驱动程序问题。 Mybatis 似乎不太擅长显示底层异常。

在 tomcat 8 的文档中找到:

Thus, the web applications that have database drivers in their WEB-INF/lib directory cannot rely on the service provider mechanism and should register the drivers explicitly.

所以,我在应用程序启动期间添加了一个 Class.forName() 和适当的 driverClass,这解决了我的问题。