-3

Javaを使用してmysqlデータベースからデータを格納および取得するために、データアクセスオブジェクトの接続を取得および閉じるために、JDBCから接続プールを実装しました。

また、JDBCAppenderというアペンダーを介して、log4jというライブラリを使用してデータベースにメインの操作と例外を保存したいと思いました。

接続プールを使用する前は、一度に1つの接続しか操作に使用されていなかったため、イベントのログは問題ありませんでした。接続が同時にプールから取得されてプールに戻されるようになったため、1つの接続(最初の接続)が閉じられると、ロガーは別の接続を取得する方法を知らないようです。

接続プールがあるデータベースにログインするにはどうすればよいですか?

私はこれを自分で調べましたが、JDBCAppender.java(apache log4j 1.2.16ライブラリにあります)のgetConnection()メソッドをオーバーライドするだけです...しかし、2つの質問があります。

LOG4J 1.2.16 jarファイルに接続プール実装クラスを含める必要がありますか?プールから接続を取得した場合、LOG4J 1.2.16 Javaファイルをjarファイルに再コンパイルするにはどうすればよいですか?

これまでに読んだ内容で、接続プールの実装とJDBCAppender Javaクラスを提供でき、そこから取得できます...

4

1 に答える 1

3

まず、特定の質問に答えるために、接続プール クラスが Log4J にある必要はありませんJAR。必要なのは、コードを実行するときにすべてのクラスとJARファイルを用意することだけです。がすべてをピックアップしますCLASSPATHCLASSPATHしたがって、これは問題の原因ではありません。

あなたの質問とその後のコメントからは、独自の接続プールを使用しているか、サードパーティの接続プールを使用しているかはわかりません。前者の場合は、DBCPC3P0、またはBoneCPなどのサードパーティ プールに確実に切り替える必要があります。後者の場合、問題はおそらくプールの構成方法が原因です。JARそれは間違いなくあなたの中にあるsとは何の関係もなくCLASSPATH、組み合わせたりブレンドしたりする必要はありません.

JDBCAppenderの javadoc を読んで、いくつかのことに気付きました。closeConnection()まず、だけでなくをオーバーライドしていることを確認してくださいopenConnection()。次に、このクラスは将来変更される可能性があり、例外もログに記録しないという警告に気付きました。

このため、Log4J の代わりにLogBackを使用することもできます。これは同じ作成者によるもので、より新しいテクノロジを表しています。そのDBAppenderConnectionは、例外のロギングをサポートしているようで、オーバーライドするのではなく、ソースをプラグインすることもできますgetConnection()

于 2012-04-13T21:38:39.883 に答える