java - Tomcat 从 {$catalina_home}/(app instance)/lib 加载 JDBC 连接器 jar 但如果在项目 pom 中则不会

标签 java tomcat maven-3

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

相关文章:

java - 从 JTable 读取输入

azure - 来自 Azure 的 Tomcat Web App 中的位置标准输出日志

Spring Boot 2.2.1 RELEASE构建错误相对路径

java - 使用 Java Swings 和 mysql 自动填充表单

java - 在 Java Web 服务中引发用户定义的异常时出现错误

java - 将 3 个枚举泛化为一种类型

tomcat - 如何让httpd转发到不同url的多个tomcat,包括/?

java - 在 Eclipse 上构建 Spring MVC 项目时出现多个错误

Spring Boot Maven 插件不创建可执行 jar

java - 无法从绝对路径加载 xml 文件