gpt4 book ai didi

java - Tomcat容器中c3p0依赖放在哪里

转载 作者:行者123 更新时间:2023-11-29 13:47:46 25 4
gpt4 key购买 nike

我的印象是数据库驱动程序库(postgres-x.x.jar'在我的例子中)和连接池(c3p0)必须驻留在容器的库中(例如,对于 Tomcat7,$CATALINA_HOME/lib)。

但是,官方的 C3p0 文档 doesn't provide any information关于将连接池的 jar 放在容器中与将其放在应用程序的 war 中:

Place the files lib/c3p0-0.9.5.2.jar and lib/mchange-commons-java-0.2.11.jar somewhere in your CLASSPATH (or any other place where your application's classloader will find it). That's it!

新 tomcat 安装中的当前问题(java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector,当我有 mchange-commons-java 依赖项时 在应用程序的 WAR 和 c3p0 依赖项在 $CATALINA_HOME/lib) 让我重新审视这个,但我找不到关于放在哪里的任何权威信息这些库。

常规应用配置
在我的例子中,c3p0 配置是通过应用程序类路径中的 spring bean 进行的:

<bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
scope="singleton" destroy-method="close">
<property name="driverClass">
<value>org.postgresql.Driver</value>
</property>
<property name="jdbcUrl">
<value>${jdbc.url}</value>
</property>
<property name="user">
<value>${jdbc.user}</value>
</property>
<property name="password">
<value>${jdbc.pw}</value>
</property>
...
<bean>

如果我在同一个 Tomcat 容器中有多个应用程序,每个应用程序都会在其 war 中包含一个这样的 c3p0 bean。

内存泄漏?

假设在容器的 lib/ 中有 postgres.jarc3p0.jar 而不是在 war 中是后者会导致内存泄漏。

Postgres 驱动程序泄漏

This user states that JDBC 驱动程序在所有 Web 应用程序共享的 JVM 范围内的单例 DriverManager 中注册自己。如果您有相同的(如在类名中)JDBC 驱动程序从两个不同的 Web 应用程序注册两次,这可能会导致您的问题。如果您的 Web 应用程序使用同一 JDBC 驱动程序的不同版本,问题就更大了。

c3p0 中的泄漏我们在 this comment on Stackoverflow 之后将 c3p0 移动到 $CATALINA_HOME/lib (我们在取消部署应用程序时收到了类似的警告)。

它们应该驻留在 Tomcat 中还是应用程序的 lib/中?

最佳答案

是否需要在Tomcat的lib目录下放一个jar,取决于Tomcat是否需要知道它。这取决于您如何配置事物。

作为一般规则,如果您在 Tomcat 配置文件中提到一个类,那么该类(以及它所依赖的类)必须位于 Tomcat 的 lib 目录中。

例如,如果您在 Tomcat 的配置文件中配置数据源,则需要使您的驱动程序类对 Tomcat 可用。相反,如果您在应用程序的代码中配置 DataSource,则不需要。

您没有指定如何配置 C3P0,因此我们无法告诉您 jar 需要在哪里。当然,如果 Tomcat 需要它但它不存在,那么您应该会看到记录的异常并且事情将无法正常工作。

关于java - Tomcat容器中c3p0依赖放在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45621073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com