JDBC驱动程序JAR文件应该驻留在具有数据源的Tomcat部署中的哪个位置?
我有使用Spring,Hibernate,Tomcat7和MySql的java Web应用程序。 我使用Datasource进行数据库操作。 我不是很清楚加载jar文件( Tomcat-jdbc.jar
和Mysql-connector.jar
)的标准位置是什么? 如果我在CATALINA_HOME/lib/
或webapps/myApp/WEB-INF/lib
保留jar子,它就可以工作。 但我被告知只使用来自/WEB-INF/lib/
CATALINA_HOME / lib /和mysql-connector.jar
的Tomcat-jdbc,它为Sql Driver
提供了ClassNotFound
exception。 有人能告诉我这些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子的位置时,拇指规则是:
- 在服务器lib位置使用jar。
- 如果jar不可用,请在应用程序的lib文件夹中包含相同的内容。
- 要查找合适的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