-3

我已经从 JDBC 实现了一个连接池来获取和关闭我的数据访问对象的连接,以便使用 java 从 mysql 数据库中存储和检索数据。

我还想通过名为 JDBCAppender 的附加程序,使用名为 log4j 的库将主要操作和异常存储在数据库中。

在使用连接池之前,事件的日志记录很好,因为一次只有一个连接被用于操作。现在连接同时被从池中抓取并交还给池,一旦一个连接(第一个)被关闭,记录器似乎不知道如何获得另一个连接。

如何登录具有连接池的数据库?

我自己对此进行了调查,我需要做的就是覆盖 JDBCAppender.java(在 apache log4j 1.2.16 库中)中的 getConnection() 方法......但我有两个问题。

我需要在 LOG4J 1.2.16 jar 文件中有我的连接池实现类吗?假设我从池中获得连接,如何将 LOG4J 1.2.16 Java 文件重新编译为 jar 文件?

到目前为止,我可以提供我的连接池实现和 JDBCAppender java 类,我们可以从那里获取它...

4

1 回答 1

3

首先,回答您的具体问题:您的连接池类不需要在 Log4J 中JAR。当你运行你的代码时,你所需要的只是在你的所有类和JAR文件中。CLASSPATHCLASSPATH拾取一切。所以这不是你的问题的原因。

我无法从您的问题和后来的一些评论中看出您是使用自己的连接池还是第三方连接池。如果是前者,您绝对应该切换到第 3 方池,例如DBCPC3P0BoneCP。如果是后者,那么您的问题可能是由您配置池的方式引起的。它绝对与 s 无关JAR,它们都在你的身上CLASSPATH,不需要组合或混合或类似的东西。

我阅读了JDBCAppender 的 javadoc并注意到了一些事情。首先,确保您是压倒一切的closeConnection(),而不仅仅是openConnection(). 接下来,我注意到一个警告,这个类将来可能会更改,并且也不会记录异常。

For this reason, you may also want to use LogBack instead of Log4J. It is by the same author and represents newer technology. Its DBAppender seems to support logging of exceptions, and also allows you to plug in your Connection source, rather than overriding getConnection().

于 2012-04-13T21:38:39.883 回答