6

我有使用 Spring、Hibernate、Tomcat7 和 MySql 的 java web 应用程序。我使用 Datasource 进行数据库操作。我不太清楚加载 jar 文件 ( Tomcat-jdbc.jar& Mysql-connector.jar) 的标准位置是什么?如果我将两个罐子都放在CATALINA_HOME/lib/或中,它会起作用webapps/myApp/WEB-INF/lib。但有人告诉我只使用来自 CATALINA_HOME/lib/ 和 的 Tomcat-jdbc mysql-connector.jar/WEB-INF/lib/这会ClassNotFoundSql Driver. 有人可以告诉我这些罐子的正确位置吗?

<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource"
        destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="${db.url}" />
        <property name="username" value="${db.username}" />
        <property name="password" value="${db.password}" />
        <property name="initialSize" value="${db.initialSize}" />
        <property name="minIdle" value="${db.minIdle}" />
        <property name="maxActive" value="${db.maxActive}" />
        <property name="maxIdle" value="${db.maxIdle}" />
        <property name="testWhileIdle" value="${db.testWhileIdle}" />
        <property name="minEvictableIdleTimeMillis" value="${db.minEvictableIdleTimeMillis}" />
        <property name="timeBetweenEvictionRunsMillis" value="${db.timeBetweenEvictionRunsMillis}" />
        <property name="validationQuery" value="${db.validationQuery}" />
    </bean>
4

2 回答 2

9

这取决于谁在管理数据源。

如果您在自己的 webapp 中手动构建和管理数据源,如 sonew SomeDataSource()等,则 JDBC 驱动程序 JAR 文件可以放在 webapp 的/WEB-INF/lib. 但是,如果 appserver 恰好自己/lib已经提供了相同的 JDBC 驱动 JAR 文件,那么您也可以直接使用它。

但是,如果您指示 appserver 自己管理数据源,而您只是在 webapp via@Resource等中使用它,那么 JDBC 驱动程序 JAR 文件必须放在 appserver 自己的/lib中,原因很简单因为数据源是在 appserver 启动时准备的,完全独立于任何(待)部署的 Web 应用程序。这个数据源反过来又可以在所有 web 应用程序之间共享。如果 JDBC 驱动程序 JAR 文件位于尚未部署的 Web 应用程序之一中,那么从技术上讲,它将无法正常工作。

于 2013-09-04T19:57:34.833 回答
0

当谈到要决定罐子的位置时,经验法则是:

  1. 在服务器库位置使用 jar。
  2. 如果 jar 不可用,请将其包含在应用程序的 lib 文件夹中。
  3. 为了找到合适的罐子,系统按顺序在以下存储库中查找:

JVM 的引导类

系统类加载器类(如上所述)

您的 Web 应用程序的 /WEB-INF/classes /WEB-INF/lib/*.jar 的

您的网络应用程序 $CATALINA_HOME/common/classes

$CATALINA_HOME/common/endorsed/*.jar

$CATALINA_HOME/common/i18n/*.jar

$CATALINA_HOME/common/lib/*.jar

$CATALINA_BASE/共享/类

$CATALINA_BASE/shared/lib/*.jar

于 2013-09-04T19:21:41.073 回答