为了sql的执行效率,也许很多人都会放弃使用hibernate,从而选择c3p0。最近项目中就遇到这种情况,而且还得用到多数据源,找了很多资料,最终也没找到,最后通过实践,终于理顺。为了大家跟我一样也走弯路,故将我的实现方式分享在这里。
首先,我选择通过c3p0-config.xml配置的方式来实现多数据源的配置,对多数据配置主要注意default-config和named-config之间的区别,刚开始看到default还以为,我name里面没定义的配置会从default中继承,其实不然,default-config和named-config是完全独立的两套数据源配置。他们之间的唯一关系便是new ComboPooledDataSource(dbSource)时,找不到name为dbSource的named-config的数据源配置时,就会自动的去尝试链接default-config的数据源配置。
数据源中的具体配置,和各property的含义各处都比较好找,这里就不在赘述。
DBConnection类
public DBConnection(String dbSource){
ds = new ComboPooledDataSource(dbSource);
}
public final synchronized Connection getConnection() throws SQLException {
try {
Connection con = ds.getConnection();
//设置连接的DatabaseMetaData对象信息
setMetaData(con);
return con;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
DBConnectionManager类
private static Map<String,DBConnection> dbConnection = new HashMap<String, DBConnection>();
private static DBConnection getDBConnection(String dbSource){
DBConnection dbConn = dbConnection.get(dbSource);
if(dbConn==null){
dbConn = new DBConnection(dbSource);
dbConnection.put(dbSource, dbConn);
}
return dbConn;
}