Tomcat JNDI:数据源无法初始化

时间:2015-06-27 11:17:19

标签: java tomcat database-connection jndi

常见问题,我知道,但我无法弄清楚。 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):

  • /etc/tomcat6/Catalina/locahost/context.xml
  • /etc/tomcat6/Catalina/context.xml
  • /var/www/WEB-INF/context.xml
  • /var/www/WEB-INF/META-INF/context.xml
  • /var/www/META-INF/context.xml

我还尝试将上面显示的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目录。但问题仍然存在。

1 个答案:

答案 0 :(得分:0)

你在Tomcat lib文件夹中有mysql JDBC JAR吗?

related answer。可能是Tomcat无法加载驱动程序。