当前位置: 首页 > 知识库问答 >
问题:

我不能在tomcat中使用JNDI来连接MySQL

瞿子濯
2023-03-14

我做了这方面的所有工作:如何连接tomcat 7和mysql<br>但它仍然无法工作……为什么?我错过了什么?

OS:Win7<br>Eclipse:J2EE Mars<br>Tomcat:Tomcat 8.0<br>java:1.8.0_73<br>数据库名称:测试<br>用户名:root<br>密码:123

writeDB testDB = new writeDB(tablename);
....
Class.forName("com.mysql.jdbc.Driver"); 
try{
      Context initContext = new InitialContext();
      Context envContext = (Context)initContext.lookup("java:/comp/env");
      //-------error------- 
      dataSource = (DataSource) envContext.lookup("jdbc/test");
      //-------error-------
   }catch(NamingException ex)
   {
      throw new RuntimeException(ex);   
   }
<!-- MySQL JNDI -->
<resource-ref>
    <description>MySQL DB</description>
    <res-ref-name>jdbc/test</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

(在TOMCAT_HOME/conf中)< br >(也在localhost-config中的workspace \ Servers \ TOMCAT v 8.0 Server中)

<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="/eatST">
<Resource 
    name="jdbc/test"
    auth="Container" 
    type="javax.sql.DataSource"
    maxActice="100" 
    maxIdle="30" 
    maxWait="10000" 
    username="root"
    password="123" 
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/test?
         useUnicode=true&amp;characterEncoding=UTF8"
    factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
 />
 </Context>
Servlet.service() for servlet [commentCtr] in context 
with path [/eatST]      threw exception
java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp2.BasicDataSource   
cannot be cast to javax.activation.DataSource
     at com.joe.db.writeDB.<init>(writeDB.java:58)
     at com.joe.servlet.CommentCtr.doPost(CommentCtr.java:38)
     at ............

共有1个答案

子车雅珺
2023-03-14

您已导入(并且可能已编程为)不正确的DataSource。您的异常(java.lang.ClassCastException...不能强制转换为javax.activation.DataSource)告诉您您已经使用了javax.activation.DataSource,但您想要javax.sql.DataSource。修改com.joe.db.writeDB并更改

import javax.activation.DataSource;

import javax.sql.DataSource;

还有,不需要< code > class . forname(" com . MySQL . JDBC . driver ");(这没什么,但是JDBC的司机现在自己注册了)。

 类似资料:
  • 目前,我们使用JNDI的Tomcat配置基于这一建议,该建议目前正在发挥作用。 如何使用JMS和JNDI连接到WebSphere MQ(MQ系列)服务器? 由于我们正在升级到v8,我想利用JMS 2.0特性。这需要将jar文件更新到JMS 2.0版本。 因此,我从tomcat lib文件夹中删除了以下JAR。 com。ibm。mq。jar 用这些罐子代替了它们。根据这个链接 com。ibm。mq。

  • Tomcat在使用后不释放连接的原因可能是什么? 这是我的配置

  • 使用JNDI,我可以连接到ActiveMQ。但是当切换提供程序类时,它给了我以下异常。 Spring JNDI配置: 例外情况: null

  • 我将在应用程序中使用tomcat-jdbc连接池。有两种方法可以添加它: 谢了。

  • 当执行单个powershell脚本时,我从我的密钥库获得凭据,或者当我连续运行它们(在相同的密钥库机密上)时获得凭据。 我试着Hibernate一秒钟,然后重试连接,但没有太大的成功。

  • 我很难弄清楚如何实现Spring Boot JMS Listener,在JBoss应用程序服务器中监听ActiveMQ队列。因此,我选择发布一个问题并用我的最终解决方案回答它,希望它可以为您节省几个小时。