本人不善表达,开门见山,直接用代码说话咯~
首先使用properties配置文件来写数据库信息
jdbc.properties:
#数据库1test1.jdbcdriver = oracle.jdbc.driver.OracleDrivertest1.url = jdbc:oracle:thin:@127.0.0.1:1521:ora8test1.user = ora1test1.password = ora1#数据库2test2.jdbcdriver = oracle.jdbc.driver.OracleDrivertest2.url = jdbc:oracle:thin:@127.0.0.1:1521:ora8test2.user = ora2test2.password = ora2
然后读取配置文件的类
C.java:
import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.Properties;public class C { private static Properties prop = null; static { prop = new Properties(); try { prop.load(C.class.getClassLoader() .getResourceAsStream("jdbc.properties")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static String CONFIG_FILE_LOCATION = System.getProperty("user.dir") + "/jdbc.properties"; //数据库1 public static final String TEST1_DRIVER = prop.getProperty("test1.jdbcdriver"); public static final String TEST1_URL = prop.getProperty("test1.url"); public static final String TEST1_USER = prop.getProperty("test1.user"); public static final String TEST1_PASSWORD = prop.getProperty("test1.password"); //数据库2 public static final String TEST2_DRIVER = prop.getProperty("test2.jdbcdriver"); public static final String TEST2_URL = prop.getProperty("test2.url"); public static final String TEST2_USER = prop.getProperty("test2.user"); public static final String TEST2_PASSWORD = prop.getProperty("test2.password");}
最后连接池文件
DataSourceFactory.java
import java.sql.Connection;import java.sql.SQLException;import java.util.HashMap;import com.mchange.v2.c3p0.ComboPooledDataSource;import common.Logger;public class DataSourceFactory { private static final Logger log = Logger.getLogger(DataSourceFactory.class); public enum DataSourceName { test1_ds(C.TEST1_DRIVER, C.TEST1_URL, C.TEST1_USER, C.TEST1_PASSWORD), test2_ds(C.TEST2_DRIVER, C.TEST2_URL, C.TEST2_USER, C.TEST2_PASSWORD); private String _driver, _url, _user, _password; private DataSourceName(String driver, String url, String user, String password){ this._driver = driver; this._url = url; this._user = user; this._password = password; } public String getDriver() { return _driver; } public String getUrl() { return _url; } public String getUser() { return _user; } public String getPassword() { return _password; } } private static HashMapdss = new HashMap (); private synchronized static ComboPooledDataSource getDataSource(final DataSourceName dsName){ ComboPooledDataSource ds = null; if((ds = dss.get(dsName)) == null){ ds = new ComboPooledDataSource(); try{ ds.setDriverClass(dsName.getDriver()); ds.setUser(dsName.getUser()); ds.setPassword(dsName.getPassword()); ds.setJdbcUrl(dsName.getUrl()); ds.setInitialPoolSize(5); ds.setMinPoolSize(1); ds.setMaxPoolSize(15); ds.setMaxStatements(50); ds.setMaxIdleTime(60); dss.put(dsName, ds); }catch(Exception e){ log.error(e, e); throw new RuntimeException("创建连接池失败:"+dsName.getUrl() ); } dss.put(dsName, ds); } return ds; } public static Connection getConnection(DataSourceName dsName){ ComboPooledDataSource ds = getDataSource(dsName); Connection conn = null; try{ conn = ds.getConnection(); }catch(Exception e){ log.error(e, e); throw new RuntimeException("获取连接失败:"+dsName.getUrl() ); } return conn; } public static void close(Connection conn){ if (conn != null) { try { if (!conn.isClosed()) { conn.close(); } } catch (SQLException e) { log.error(e); } conn = null; } } }
以上三个文件都建好以后,如果要使用连接池使用以下代码即可:
Connection conn = DataSourceFactory.getConnection(DataSourceFactory.DataSourceName.test1_ds)