Pet*_*fin 6 java tomcat datasource jdbc
我有使用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.jarfrom /WEB-INF/lib/,它给出了一个ClassNotFoundException Sql 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>
Run Code Online (Sandbox Code Playgroud)
这取决于谁在管理数据源.
如果您在自己的webapp中手动构建和管理数据源new SomeDataSource()等,那么JDBC驱动程序JAR文件可以放在webapp中/WEB-INF/lib.但是如果appserver碰巧提供了自己的JDBC驱动程序JAR文件/lib,那么你也可以使用它.
但是,如果你指示appserver自己管理数据源而你只是通过webapp @Resource等在webapp中使用它,那么JDBC驱动程序JAR文件必须放在appserver中/lib,原因很简单因为数据源是在appserver的启动时准备的,完全独立于任何(将)部署的Web应用程序.此数据源又可在所有Web应用程序之间共享.如果JDBC驱动程序JAR文件位于尚未部署的Web应用程序之一,那么从技术上讲它就不起作用了.
当谈到要决定罐子的位置时,经验法则是:
JVM 的引导类
系统类加载器类(如上所述)
/WEB-INF/Web 应用程序的类 /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