【问题标题】:Tomcat7 MySQL connector inconsistencyTomcat7 MySQL 连接器不一致
【发布时间】:2015-11-09 16:06:32
【问题描述】:

这是一个有点奇怪的问题,我无法弄清楚发生了什么。我在 Tomcat7 实例上运行了两个应用程序 (WARS)。它们都连接到数据库并使用 JNDI 获取该连接。在tomcat context.xml文件中指定的数据源引用如下。

Tomcat7/conf/context.xml

<Resource name="jdbc/dataSourceOne" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="user" password="pass" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/databaseone" />

<Resource name="jdbc/dataSourceTwo" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="user" password="pass" driverClassName="com.mysql.jdbc.Driver"  url="jdbc:mysql://localhost/databasetwo" />

WEB-INF/lib

两个应用程序的 lib 文件夹中都有一个 mysql 连接器 jar 的副本。

  • mysql-connector-java-5.1.34.jar

现在奇怪的是,应用程序 1 可以直接开箱即用。我只需要在我的 tomcat 实例上部署 WAR 就可以了。它获取了它的数据源,并且可以毫无问题地连接到它的数据库。

但是,当我尝试部署应用程序 2 时,我得到一个 MySQL class not found 异常。现在解决此问题的方法是将上述 mysql 连接器 jar 添加到 tomcat7/lib 文件夹。

我的问题是为什么我只需要为我的第二个应用程序添加这个?如果 tomcat7 需要 mysql 连接器 jar,为什么我的第一个应用程序在没有对 tomcat7 设置进行任何修改的情况下工作?

如果不进行修改,一个应用程序可以运行,而另一个应用程序无法运行,这是没有意义的。

任何帮助将不胜感激。

【问题讨论】:

  • 那么,应用程序 1 真的使用数据源吗?在我看来,这听起来像是手动创建连接。当您注释掉 dataSourceOne 资源时会发生什么,应用程序会中断吗?应用程序的 web.xml 中的数据源是否有任何资源引用?
  • 在没有看到配置文件的情况下无法说出任何具体的内容。我同意 app 1 在没有 tomcat lib 文件夹中的驱动程序的情况下工作很奇怪。
  • @Gimby - 原来你是对的,应用程序 1 实际上并没有使用在 tomcats context.xml 文件中定义的数据源。感谢您的意见,非常感谢您的帮助。
  • 但是,如果删除了数据源定义,为什么应用程序会中断呢?应用程序是否以某种方式手动读取该配置数据?

标签: java tomcat7 jndi mysql-error-1064


【解决方案1】:

@Gimby - 事实证明你是对的,应用程序 1 实际上并没有使用 tomcats context.xml 文件中定义的数据源。感谢您的输入,非常感谢您的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    相关资源
    最近更新 更多