【问题标题】:Why does this work? JNDI, Tomcat6为什么这行得通? JNDI、Tomcat6
【发布时间】:2012-03-23 18:52:03
【问题描述】:

我正在尝试将所有数据库信息移出项目,以便 SA 可以设置服务器并从 DEV->QA->PROD 移动相同的 WAR,而无需更改 WAR 文件中的任何内容。我们将 JNDI 设置为 tomcat6 上的 MySQL 数据库。

将以下内容添加到 server.xml

<Resource name="jdbc/mi" auth="Container" type="javax.sql.DataSource"
              username="xxx" password="xxx"
              url="jdbc:mysql://xx"
              driverClassName="com.mysql.jdbc.Driver"
              initialSize="5" maxWait="5000"
              maxActive="120" maxIdle="5"
              validationQuery="select 1"
              poolPreparedStatements="true"/>

但项目运行不正常。我收到以下错误:

Caused by: org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'

如果我在我的项目中使用相同的信息设置 /META-INF/context.xml 一切运行良好,但 SA 不希望我的战争中的服务器信息。会是什么??有人可以帮我解决这个问题吗?我在互联网上搜索并尝试了所有方法,但没有任何效果……请帮助程序员!

【问题讨论】:

    标签: java jdbc tomcat6 jndi


    【解决方案1】:

    您是否在项目中设置了WEB-INF/web.xml?它应该包含这样的内容

    <resource-env-ref>
        <resource-env-ref-name>jdbc/mi</resource-env-ref-name>
        <resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
    </resource-env-ref>
    

    你没有在你的问题中提到它,所以它可能会丢失。看到这个Java documentationthe Tomcat6' one

    【讨论】:

      【解决方案2】:

      在您的 context.xml 中,您需要一个资源链接,以便应用知道在全局范围内查找资源。

      <ResourceLink name="jdbc/mi" global="jdbc/mi"/>
      

      【讨论】:

        【解决方案3】:

        除了上述答案之外,您还需要确保您的数据库的 JDBC 库位于 ${TOMCAT_HOME}/lib 文件夹中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-20
          • 1970-01-01
          • 2016-04-28
          • 1970-01-01
          • 2014-12-02
          • 2014-04-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多