严重:无法使用context.xml文件创建pool-tomcat 7的初始连接

naz*_*art 9 java xml tomcat runtimeexception

我试图在tomcat上运行项目7.0.52并通过context.xml文件初始化为DB .

但它引发了一堆例外,我无法弄清楚那里有什么问题.

这是控制台输出:

java.sql.SQLException: com.mysql.jdbc.Driver
    at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:254)
    at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:182)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:701)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:635)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:486)
    at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:144)
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:116)
    at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:103)
    at org.apache.tomcat.jdbc.pool.DataSourceFactory.createDataSource(DataSourceFactory.java:554)
    at org.apache.tomcat.jdbc.pool.DataSourceFactory.getObjectInstance(DataSourceFactory.java:242)
    at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:141)
    at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
Run Code Online (Sandbox Code Playgroud)

这是完整的堆栈跟踪.

这是输出到tomcat catalina日志

web.xml的片段:

<resource-ref>
    <description>Travel Agency Datasource</description>
    <res-ref-name>jdbc/onlinedb</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>
Run Code Online (Sandbox Code Playgroud)

context.xml:

<Context>
    <Resource name="jdbc/onlinedb"
              type="javax.sql.DataSource"
              factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
              maxActive="20" maxIdle="10"
              maxWait="-1"
              username="root"
              password="secret"
              driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/travelagency?characterEncoding=utf8"/>
</Context>
Run Code Online (Sandbox Code Playgroud)

ConnectionManager类:

public class ConnectionManager {
    private static Logger log = Logger.getLogger(ConnectionManager.class);

    public static Connection getConnection() throws SQLException {
        Connection con = null;
        try {
            Context initContext = new InitialContext();
            Context envContext = (Context) initContext.lookup("java:/comp/env");
            DataSource datasource = (DataSource) envContext.lookup("jdbc/onlinedb");
            con = datasource.getConnection();
        } catch (NamingException e) {
            log.error(e);
        }
        return con;
    }
}
Run Code Online (Sandbox Code Playgroud)

mysql-connector-java-5.1.27-bin.jar 添加到cp:

旅行

我试图更改context.xml文件的内容:

<resource-env-ref>
        <description>Travel Agency Datasource</description>
        <resource-env-ref-name>jdbc/onlinedb</resource-env-ref-name>
        <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
</resource-env-ref>
Run Code Online (Sandbox Code Playgroud)

但它一直都在失败.

如何解决这个麻烦?

WeM*_*are 12

您必须将MySQL jdbc驱动程序添加到类路径中.

将MySQL二进制jar放到tomcat lib文件夹中或将其添加到我们的应用程序WEB-INF/lib文件夹中.

您可以找到二进制jar(相应地更改版本):https: //mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.27

  • 尝试将其添加到tomcat lib文件夹中 (3认同)

mat*_*t b 6

当您遇到这样的异常时,最有用的信息通常在stacktrace的底部:

Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
  at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
  ...
  at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:246)
Run Code Online (Sandbox Code Playgroud)

问题是Tomcat无法找到com.mysql.jdbc.Driver。这通常是由于包含MySQL驱动程序的JAR不在Tomcat期望找到的位置(即在webapps/<yourwebapp>/WEB-INF/lib目录中)引起的。