package com.yihu.ehr.util.db; import org.apache.commons.dbcp2.DriverManagerConnectionFactory; import org.apache.commons.dbcp2.PoolableConnection; import org.apache.commons.dbcp2.PoolableConnectionFactory; import org.apache.commons.dbcp2.PoolingDataSource; import org.apache.commons.pool2.impl.GenericObjectPool; import javax.sql.DataSource; /** * Created by Air on 2015/5/28. */ public class DataSourcePool { public static final String JDBC_MYSQL = "jdbc:mysql"; public static final String JDBC_ORACLE = "jdbc:oracle"; public static final String JDBC_MICROSOFT_SQLSERVER = "jdbc:microsoft:sqlserver"; public static final String COM_MYSQL_JDBC_DRIVER = "com.mysql.jdbc.Driver"; public static final String ORACLE_JDBC_DRIVER_ORACLE_DRIVER = "oracle.jdbc.driver.OracleDriver"; public static final String COM_MICROSOFT_JDBC_SQLSERVER_DRIVER = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; private DriverManagerConnectionFactory connectionFactory; private PoolableConnectionFactory poolableConnectionFactory; private GenericObjectPool connectionPool; private String uri; public DataSourcePool(String uri) { this.uri = uri; registerDriver(); connectionFactory = new DriverManagerConnectionFactory(this.uri, null); poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory, null); connectionPool = new GenericObjectPool<>(poolableConnectionFactory); poolableConnectionFactory.setPool(connectionPool); } public DataSource getDataSource() { return new PoolingDataSource<>(connectionPool); } public void registerDriver() { try { Class.forName(getDriver()); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public String getDriver() { if (this.uri.contains(JDBC_MYSQL)) { return COM_MYSQL_JDBC_DRIVER; } else if (this.uri.contains(JDBC_ORACLE)) { return ORACLE_JDBC_DRIVER_ORACLE_DRIVER; } else if (this.uri.contains(JDBC_MICROSOFT_SQLSERVER)) { return COM_MICROSOFT_JDBC_SQLSERVER_DRIVER; } return null; } }