java - JDBC 驱动程序 JAR 文件应该驻留在具有数据源的 Tomcat 部署中的什么位置?

标签 java tomcat jdbc datasource

我有使用 Spring、Hibernate、Tomcat7 和 MySql 的 Java Web 应用程序。我使用 Datasource 进行数据库操作。我不太清楚加载 jar 文件 (Tomcat-jdbc.jar & Mysql-connector.jar) 的标准位置是什么?如果我将两个 jar 都保存在 CATALINA_HOME/lib/webapps/myApp/WEB-INF/lib 中,它就会起作用。但是我被告知只使用来自 CATALINA_HOME/lib/的 Tomcat-jdbc 和来自 /WEB-INF/lib/mysql-connector.jar,它给出了一个 ClassNotFound Sql Driver 异常。有人可以告诉我这些 jar 的正确位置吗?

<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>

最佳答案

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

如果你像new SomeDataSource()这样在你自己的webapp中手动构建和管理数据源,那么JDBC驱动JAR文件可以放在webapp的/WEB- INF/库。但是,如果应用服务器碰巧在它自己的 /lib 中提供了完全相同的 JDBC 驱动程序 JAR 文件,那么您也可以直接使用它。

但是,如果您指示应用服务器自行管理数据源,而您只是通过 @Resource 等在您的 webapp 中使用它,那么 JDBC 驱动程序 JAR 文件具有放置在 appserver 自己的 /lib 中,原因很简单,因为数据源是在 appserver 启动时准备的,完全独立于任何(将要)部署的 web 应用程序。此数据源又可在所有 Web 应用程序之间共享。如果 JDBC 驱动程序 JAR 文件位于尚未部署的 Web 应用程序之一中,从技术上讲,它是行不通的。

关于java - JDBC 驱动程序 JAR 文件应该驻留在具有数据源的 Tomcat 部署中的什么位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18621662/

相关文章:

java - 在远程 Tomcat 上自动部署 Java 应用程序

java - 如何在 spring-boot 应用程序中为 Apache Tomcat 中的 AccessLogValve 设置属性 requestAttributesEnabled?

java - 找不到适合 jdbc :h2:tcp 的驱动程序

Java单例-空静态变量(无法解释)

tomcat - 在 intellij 中配置 'Run/Debug'

java - 操作 javac -d : invalid flag? 时出错 如果我更正它,则会出现另一个 package-not-found 错误

java - 使用 Spring 进行数据库缓存并能够查询它

java - 如何创建基于 ActionResolver 的 jdbc sqlite 连接?

java - 为什么这个表达式 i+=i++ 不同于 Java 和 C?

java - 有没有办法从 PlayFramework 中的模型获取 session 信息?