常见问题,我知道,但我无法弄清楚。 Tomcat 6.0.41具有非常标准的设置,单个主机。当我尝试从DataSource
获取JDBC数据库连接时,出现以下错误:
org.apache.commons.dbcp.SQLNestedException:无法创建JDBC驱动程序 班级''用于连接URL' null'
... 引起:java.sql.SQLException:没有合适的驱动程序
我的JDBC驱动程序jar文件(MySQL Connector / J)位于 /usr/share/tomcat6/lib/mysql-connector-java-5.1.35-bin.jar
。
这是我的context.xml文件:
<context>
<Resource name="jdbc/first_db"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="..."
password="..."
url="jdbc:mysql://my.host.com:3306/first_db"
connectionProperties="verifyServerCertificate=false;useSSL=true;requireSSL=true"/>
<Resource name="jdbc/second_db"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="..."
password="..."
url="jdbc:mysql://my.host.com:3306/second_db"
connectionProperties="verifyServerCertificate=false;useSSL=true;requireSSL=true"/>
</context>
我的web.xml中有这个:
<resource-ref>
<description>First DB Connection</description>
<res-ref-name>jdbc/first_db</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<resource-ref>
<description>Second DB Connection</description>
<res-ref-name>jdbc/second_db</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
在我的代码中,我这样做:
Context ctx = new InitialContext();
dataSource = (DataSource) ctx.lookup("java:comp/env/jdbc/first_db");
Connection conn = dataSource.getConnection(); // error here
我已尝试将context.xml
放在以下位置(我的webapp根位于/var/www
):
我还尝试将上面显示的context.xml中的资源元素添加到/etc/tomcat6/context.xml
的全局上下文配置中。我尝试的所有内容都会导致相同的JDBC错误。
我刚刚将代码中的JNDI查找字符串更改为不存在的内容,我得到了这个:
javax.naming.NameNotFoundException:名称doesNotExist未在此上下文中绑定
...因此,我通常不会看到此错误,这一事实必定意味着找到并处理了context.xml
文件 。这意味着Tomcat无法找到MySQL驱动程序。但/usr/share/tomcat6/lib
中的绝对。我刚刚将驱动程序更新到最新版本(v5.1.35),但仍然会出现同样的错误。
我刚从我的WEB-INF/lib
目录中删除了mysql驱动程序jar文件,因为有些人说tomcat系统中存在和可能存在问题lib目录。但问题仍然存在。