LOG4J使用Hibernate管理数据库连接
2006-12-21 16:43
302 查看
LOG4J向数据库中写LOG,而JDBCAppender就得要单独进立数据库连接,而写LOG的操作非常频繁,这样,如果按JDBCAppender的方法要频繁地进行连接断开数据库操作,显然,这不是最理想的。在网上有文章介绍把这个改成数据库连接池的。Hibernate现在在J2EE项目中已经应用相当广泛,下面介绍如何扩展JDBCAppender,用Hibernate的数据库连接。
查看JDBCAppender,我们可以看出,只要重载下面三个方法即可:
protected Connection getConnection() throws SQLException ;
protected void execute(String sql) throws SQLException;
protected void closeConnection(Connection con);
具体实现原码如下所示:
package com.common.util;
import java.sql.Connection;
import java.sql.SQLException;
import org.apache.log4j.spi.ErrorCode;
import org.apache.log4j.spi.LoggingEvent;
public class JDBCConnAppender extends org.apache.log4j.jdbc.JDBCAppender {
/**
* Override 此函数来返回一个hibernate的连接。
*/
protected Connection getConnection() throws SQLException {
return HibernateUtil.currentSession().connection();
}
/**
*执行数据库操作。
*/
protected void execute(String sql) throws SQLException {
Connection con = null;
Statement stmt = null;
try {
con = getConnection();
stmt = con.createStatement();
stmt.execute(sql);
con.commit();
} catch (SQLException e) {
if (stmt != null)
stmt.close();
throw e;
}
stmt.close();
closeConnection(con);
}
/**
*关闭数据库连接。
*/
protected void closeConnection(Connection con) {
try {
if (connection != null && !connection.isClosed())
connection.close();
} catch (SQLException e) {
errorHandler.error("Error closing connection", e,
ErrorCode.GENERIC_FAILURE);
}
}
}
查看JDBCAppender,我们可以看出,只要重载下面三个方法即可:
protected Connection getConnection() throws SQLException ;
protected void execute(String sql) throws SQLException;
protected void closeConnection(Connection con);
具体实现原码如下所示:
package com.common.util;
import java.sql.Connection;
import java.sql.SQLException;
import org.apache.log4j.spi.ErrorCode;
import org.apache.log4j.spi.LoggingEvent;
public class JDBCConnAppender extends org.apache.log4j.jdbc.JDBCAppender {
/**
* Override 此函数来返回一个hibernate的连接。
*/
protected Connection getConnection() throws SQLException {
return HibernateUtil.currentSession().connection();
}
/**
*执行数据库操作。
*/
protected void execute(String sql) throws SQLException {
Connection con = null;
Statement stmt = null;
try {
con = getConnection();
stmt = con.createStatement();
stmt.execute(sql);
con.commit();
} catch (SQLException e) {
if (stmt != null)
stmt.close();
throw e;
}
stmt.close();
closeConnection(con);
}
/**
*关闭数据库连接。
*/
protected void closeConnection(Connection con) {
try {
if (connection != null && !connection.isClosed())
connection.close();
} catch (SQLException e) {
errorHandler.error("Error closing connection", e,
ErrorCode.GENERIC_FAILURE);
}
}
}
相关文章推荐
- log4j使用心得
- Struts-输出日志-使用log4j
- Log4j的配置和使用
- 使用Log4j记录日志
- Log4j使用技巧――让子类使用父类中定义的Logger
- java-log4j-xml配置 category、logger、boot 标签使用
- [logstash-input-log4j]插件使用详解
- 在javaweb中使用log4j
- 最详细的Log4j使用教程
- log4j使用方法
- Log4J组件使用
- log4j使用及相关说明
- log4j在项目中的使用
- log4j的使用
- 在intellij Idea中使用log4j输出日志信息案例
- Log4j使用详解
- log4j2.1使用指南[二] Web工程
- log4j的配置和使用
- lOG4j日志的使用
- Log4j的配置说明与使用