我正在使用 Tomcat 7.0.53
我有一个应用程序需要为它的 JDBC 连接加载 mysql-connector-java-5.0.8.jar。如果我将连接器 jar 放在 {$catalina_home}/(app instance)/lib/目录中,一切都可以正常加载。如果我使用 maven 将 jar 导入到我的 war 中,或者将 jar 放在 {$catalina_home/lib/那么它将不会加载。
我有一个相当典型的 war 设置,导入的 jar(s) 放在/WEB-INF/lib/目录中。然而,与我通常从事的项目有一点不同。不同数据源的上下文文件作为显式文件位于 webapp/{app}/META-INF/context.xml 中。
理想情况下,我想使用 Maven 将连接器 jar 放入我的 war 中,所以如果有人能告诉我: 1. 为什么会这样? 2. 一个可能的修复,以便连接器 jar 可以通过 maven 导入?
将不胜感激。
最佳答案
当您让 Tomcat 管理您的数据源并通过 JNDI 使其可用时,它会使用自己的类加载器来进行初始化,而不是用于 webapp 本身的类加载器。这意味着为了初始化数据源,所有需要的类都必须在 Tomcat 的类路径中(例如,在它的 lib 目录中)。
Tomcat 这样做是为了将容器与潜在的错误或恶意网络应用程序隔离开来,并促进加载和卸载网络应用程序的能力。
关于java - Tomcat 从 {$catalina_home}/(app instance)/lib 加载 JDBC 连接器 jar 但如果在项目 pom 中则不会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29703486/