我有使用 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/