【IT168 技术文档】
Log4j数据库连接池的配置如下: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;
}
}
poolman.xml配置如下: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')
运行成功!对于JDBCPoolAppender的属性(比如sqlname属性)我们可以利用Log4j的反射机制随便添加,只要在配置文件给其附上值即可应用,而原来的父类里面的一些属性(username什么的)和其get,set方法由于在连接池中不需要,所以删除。而在JDBCPoolAppender类中,我也只是将getConnection 方法Override ,在这个方法中我们可以根据需要生成我们的Connection对象,另外两个方法大家可以根据需求来决定怎样Override。〈?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>
