【问题标题】:Error starting webapp with Mybatis, c3p0 on Tomcat 8在 Tomcat 8 上使用 Mybatis、c3p0 启动 webapp 时出错
【发布时间】:2015-07-17 21:57:16
【问题描述】:

我正在尝试在 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 无法启动,因为它无法连接到数据库。

有没有人升级到Tomcat 8并且成功使用了Mybatis-c3p0?如果是的话,我在这里错过了什么吗?

【问题讨论】:

  • 根本原因是在你的等待()线程上调用中断()的人/任何人(也许是导致它们等待()这么长时间以至于决定中断它们的条件)。
  • @SteveWaldman 我们可以通过调试以某种方式知道什么是中断吗?
  • 不幸的是,不是很容易。抛开您可能施加的任何安全策略的约束,任何东西都可以访问线程并调用其中断()方法。也许在您的调试器中,您可以监视对该方法的调用,或者在您的代码库中搜索它们。否则,可能会调用 interrupt() 以响应长时间等待,您可能会尝试解决导致客户端长时间等待的条件或设置。

标签: java tomcat mybatis c3p0 tomcat8


【解决方案1】:

解决了这个问题。这是 JDBC 驱动程序问题。 Mybatis 在显示底层异常方面似乎不是很好。

在 tomcat 8 的文档中找到这个:

因此,具有数据库驱动程序的 Web 应用程序 WEB-INF/lib 目录不能依赖服务提供者机制 并且应该显式注册驱动程序。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 2013-12-07
    • 2014-12-22
    • 2017-05-21
    相关资源
    最近更新 更多