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

我有使用Spring,Hibernate,Tomcat7和MySql的java Web应用程序。 我使用Datasource进行数据库操作。 我不是很清楚加载jar文件( Tomcat-jdbc.jarMysql-connector.jar )的标准位置是什么? 如果我在CATALINA_HOME/lib/webapps/myApp/WEB-INF/lib保留jar子,它就可以工作。 但我被告知只使用来自/WEB-INF/lib/ CATALINA_HOME / lib /和mysql-connector.jar的Tomcat-jdbc,它为Sql Driver提供了ClassNotFoundexception。 有人能告诉我这些jar子的正确位置吗?

               

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

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

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

当谈到要确定的jar子的位置时,拇指规则是:

  1. 在服务器lib位置使用jar。
  2. 如果jar不可用,请在应用程序的lib文件夹中包含相同的内容。
  3. 要查找合适的Jars,系统将按以下顺序查找以下存储库:

JVM的Bootstrap类

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

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

您的Web应用程序$ CATALINA_HOME / common / classes

$ CATALINA_HOME /普通/核准/ *。JAR

$ CATALINA_HOME /普通/ i18n中/ *。JAR

$ CATALINA_HOME / common / lib目录/ *。JAR

$ CATALINA_BASE /共享/class

$ CATALINA_BASE /共享/ lib目录/ *。JAR