標籤:dpcp tomcat 資料庫連接池 java 線程
<span style="font-size:18px;"><strong>Java代碼</strong></span>
package cn.songxinqiang.samples.commonsdbcp.util; import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.SQLException;import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory; /** * tomcat資料庫連接池管理類<br> * 使用為tomcat部署環境<br> * 需要在類路徑下準備資料庫連接設定檔dbcp.properties * * */public class DBManager { private static final Log log = LogFactory.getLog(DBManager.class); private static final String configFile = "dbcp.properties"; private static DataSource dataSource; static { Properties dbProperties = new Properties(); try { dbProperties.load(DBManager.class.getClassLoader() .getResourceAsStream(configFile)); dataSource = BasicDataSourceFactory.createDataSource(dbProperties); Connection conn = getConn(); DatabaseMetaData mdm = conn.getMetaData(); log.info("Connected to " + mdm.getDatabaseProductName() + " " + mdm.getDatabaseProductVersion()); if (conn != null) { conn.close(); } } catch (Exception e) { log.error("初始化串連池失敗:" + e); } } private DBManager() { } /** * 擷取連結,用完後記得關閉 * * @see {@link DBManager#closeConn(Connection)} * @return */ public static final Connection getConn() { Connection conn = null; try { conn = dataSource.getConnection(); } catch (SQLException e) { log.error("擷取資料庫連接失敗:" + e); } return conn; } /** * 關閉串連 * * @param conn * 需要關閉的串連 */ public static void closeConn(Connection conn) { try { if (conn != null && !conn.isClosed()) { conn.setAutoCommit(true); conn.close(); } } catch (SQLException e) { log.error("關閉資料庫連接失敗:" + e); } } }
properties檔案
#資料庫驅動driverClassName=com.mysql.jdbc.Driver#資料庫連接地址url=jdbc:mysql://localhost/lianjc#使用者名稱username=root#密碼password=123456 #串連池的最大資料庫連接數。設為0表示無限制maxActive=30#最大空閑數,資料庫連接的最大空閑時間。超過空閑時間,資料庫連#接將被標記為不可用,然後被釋放。設為0表示無限制maxIdle=10#最大建立串連等待時間。如果超過此時間將接到異常。設為-1表示無限制maxWait=1000 #超過removeAbandonedTimeout時間後,是否進 行沒用串連(廢棄)的回收(預設為false,調整為true) removeAbandoned=true#超過時間限制,回收沒有用(廢棄)的串連(預設為 300秒,調整為180)removeAbandonedTimeout=180
線程測試,千萬連結無壓力
import java.sql.Connection;public class TheadTest extends Thread{public static void main(String[] args) {for(int i=0;i<10000;i++){new TheadTest2().start();}}@Overridepublic void run() {long begin=System.currentTimeMillis(); for(int i=0;i<100000;i++){ Connection conn=null;try {conn = new JDBCUtils().getConnection();} catch (Exception e) {e.printStackTrace();} // System.out.println(i); new JDBCUtils().close(null, null, conn); } long end=System.currentTimeMillis(); System.out.println("用時:"+(end-begin));}}class TheadTest2 extends Thread{@Overridepublic void run() { long begin=System.currentTimeMillis(); for(int i=0;i<1000;i++){ Connection conn=XDBManager.getConn(); // System.out.println(i); XDBManager.closeConn(conn); } long end=System.currentTimeMillis(); System.out.println("用時:"+(end-begin));}}
需要的jar包
java配置dbcp串連池,經過反覆測試