技术开发 频道

给Log4j配上数据库连接池


【IT168 技术文档】
MyDB.java: package common.sql; import java.sql.*; import com.codestudio.sql.*; //引入开源项目Poolman数据库连接池的包 public class MyDB { public static final String module = MyDB.class.getName(); private String dbName = ""; private PoolMan plmn = null; public MyDB(String dbName) { try { if (plmn == null) { plmn = (PoolMan) Class.forName("com.codestudio.sql.PoolMan"). newInstance(); } } catch (Exception ec) { System.out.println(ec.toString()+module); } this.dbName = dbName; } private Connection getNewConnection() { Connection conn = null; try { conn = plmn.connect("jdbc:poolman://" + dbName); conn.setAutoCommit(true); } catch (Exception ec) { System.out.println(ec.toString()+"First:Connect sqlsever failed"+module);
try
{ Thread.sleep(1000); conn = plmn.connect("jdbc:poolman://" + dbName); conn.setAutoCommit(true); } catch (Exception ecs) { System.out.println(ecs.toString()+"Again:Connect sqlsever faile"+module);
}
}
return conn; }
public Connection getConnection() { return getNewConnection(); } }
GeneralDb.java: package common.sql; package common.sql; import java.util.*; public class GeneralDb { private static Hashtable dbPool; public static MyDB getInstance(String dbname) { if (dbPool == null) { dbPool = new Hashtable(); } MyDB db = (MyDB) dbPool.get(dbname); if (db == null) { db = new MyDB(dbname); dbPool.put(dbname, db); } return db; } }
        Log4j数据库连接池的配置如下:
log4j.appender.JDBC=common.log.JDBCPoolAppender log4j.appender.JDBC.sqlname=log log4j.appender.JDBC.layout=org.apache.log4j.PatternLayout log4j.appender.JDBC.sql=INSERT INTO LOGGING (log_date, log_level, location, message) VALUES ('%d{ISO8601}', '%-5p', '%C,%L', '%m')
        poolman.xml配置如下:
?xml version="1.0" encoding="UTF-8"?> 〈poolman> 〈management-mode>local〈/management-mode> 〈datasource> 〈dbname>log〈/dbname> 〈jndiName>log〈/jndiName> 〈driver>com.mysql.jdbc.Driver〈/driver> 〈url>jdbc:mysql://localhost:3306/test〈/url> 〈username>use〈/username> 〈password>password〈/password> 〈minimumSize>0/minimumSize> 〈maximumSize>10/maximumSize> 〈logFile>logs/mysql.log〈/logFile> /datasource> /poolman>
        运行成功!对于JDBCPoolAppender的属性(比如sqlname属性)我们可以利用Log4j的反射机制随便添加,只要在配置文件给其附上值即可应用,而原来的父类里面的一些属性(username什么的)和其get,set方法由于在连接池中不需要,所以删除。而在JDBCPoolAppender类中,我也只是将getConnection 方法Override ,在这个方法中我们可以根据需要生成我们的Connection对象,另外两个方法大家可以根据需求来决定怎样Override。
0
相关文章