亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

使用 Tomcat 7 新的連接池 —— Tomcat jdbc po

系統 1916 0

Tomcat 在 7.0 以前的版本都是使用? commons-dbcp ?做為連接池的實現,但是 dbcp 飽受詬病,原因有:

  1. dbcp 是單線程的,為了保證線程安全會鎖整個連接池
  2. dbcp 性能不佳
  3. dbcp 太復雜,超過 60 個類
  4. dbcp 使用靜態接口,在 JDK 1.6 編譯有問題
  5. dbcp 發展滯后

因此很多人會選擇一些第三方的連接池組件,例如? c3p0 ?,? bonecp ,? druid ?( @wenshao ?) 等。

為此,Tomcat 從 7.0 開始引入一個新的模塊:Tomcat jdbc pool

  1. tomcat jdbc pool 近乎兼容 dbcp ,性能更高
  2. 異步方式獲取連接
  3. tomcat jdbc pool 是 tomcat 的一個模塊,基于 tomcat JULI,使用 Tomcat 的日志框架
  4. 使用 javax.sql.PooledConnection 接口獲取連接
  5. 支持高并發應用環境
  6. 超簡單,核心文件只有8個,比 c3p0 還
  7. 更好的空閑連接處理機制
  8. 支持 JMX
  9. 支持 XA Connection

tomcat jdbc pool 的優點遠不止這些,詳情請看 這里 。

tomcat jdbc pool 可在 Tomcat 中直接使用,也可以在獨立的應用中使用。

Tomcat 中直接使用的方法:

數據源配置:

?

?

??????auth="Container"

??????type="javax.sql.DataSource"

??????factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"

??????testWhileIdle="true"

??????testOnBorrow="true"

??????testOnReturn="false"

??????validationQuery="SELECT 1"

??????validationInterval="30000"

??????timeBetweenEvictionRunsMillis="30000"

??????maxActive="100"

??????minIdle="10"

??????maxWait="10000"

??????initialSize="10"

??????removeAbandonedTimeout="60"

??????removeAbandoned="true"

??????logAbandoned="true"

??????minEvictableIdleTimeMillis="30000"

??????jmxEnabled="true"

??????jdbcInterceptors=

"org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"

??????username="root"

??????password="password"

??????driverClassName="com.mysql.jdbc.Driver"

??????url="jdbc:mysql://localhost:3306/mysql"/>

異步獲取連接的方法:

?

Connection con = null;

try {

??Future future = datasource.getConnectionAsync();

??while (!future.isDone()) {

??????System.out.println("Connection is not yet available. Do some background work");

??????try {

?Thread.sleep(100); //simulate work

??????}catch (InterruptedException x) {

?Thread.currentThread().interrupted();

??????}

??}

??con = future.get(); //should return instantly

??Statement st = con.createStatement();

??ResultSet rs = st.executeQuery("select * from user");

在獨立的應用中使用:

?

?

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.Statement;

?

import org.apache.tomcat.jdbc.pool.DataSource;

import org.apache.tomcat.jdbc.pool.PoolProperties;

?

public class SimplePOJOExample {

?

????public static void main(String[] args) throws Exception {

PoolProperties p = new PoolProperties();

p.setUrl("jdbc:mysql://localhost:3306/mysql");

p.setDriverClassName("com.mysql.jdbc.Driver");

p.setUsername("root");

p.setPassword("password");

p.setJmxEnabled(true);

p.setTestWhileIdle(false);

p.setTestOnBorrow(true);

p.setValidationQuery("SELECT 1");

p.setTestOnReturn(false);

p.setValidationInterval(30000);

p.setTimeBetweenEvictionRunsMillis(30000);

p.setMaxActive(100);

p.setInitialSize(10);

p.setMaxWait(10000);

p.setRemoveAbandonedTimeout(60);

p.setMinEvictableIdleTimeMillis(30000);

p.setMinIdle(10);

p.setLogAbandoned(true);

p.setRemoveAbandoned(true);

p.setJdbcInterceptors("org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;"+

?"org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer");

DataSource datasource = new DataSource();

datasource.setPoolProperties(p);

?

Connection con = null;

try {

?con = datasource.getConnection();

?Statement st = con.createStatement();

?ResultSet rs = st.executeQuery("select * from user");

?int cnt = 1;

?while (rs.next()) {

?????System.out.println((cnt++)+". Host:" +rs.getString("Host")+

" User:"+rs.getString("User")+" Password:"+rs.getString("Password"));

?}

?rs.close();

?st.close();

} finally {

?if (con!=null) try {con.close();}catch (Exception ignore) {}

}

????}

}

?

以上只是簡單的介紹,具體的使用方法還需參考:

https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html

引自: http://www.oschina.net/question/12_36910

使用 Tomcat 7 新的連接池 —— Tomcat jdbc pool


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久夜色tv网站免费影院 | 国产成人在线看 | 能在线观看的一区二区三区 | 国产99r视频精品免费观看 | 高清国产一区二区 | 欧美成人久久久 | 欧美激情社区 | 日韩国产欧美一区二区三区 | 日本精品中文字幕在线不卡 | 亚洲精品一区二区乱码在线观看 | 免费福利视频网站 | 亚洲激情一区 | 亚洲视频在线视频 | aⅴ免费视频 | 亚洲欧美中日韩 | 欧美精品一区二区精品久久 | 狠狠亚洲丁香综合久久 | 国产成人久久精品激情 | 中文字幕日韩女同互慰视频 | 国产99久久九九精品免费 | 深夜精品寂寞在线观看黄网站 | 曰本女人视频69xxx | 久久精品国产一区二区三区 | 天天爱天天色天天干 | 黄黄网| 日韩毛片免费线上观看 | 成年人黄色小视频 | 国产精品国产自线在线观看 | 国产成人亚洲综合在线 | 奇米77777| 一区二区三区在线免费 | 国产成人免费手机在线观看视频 | 成人公开视频 | 亚洲国产欧美久久香综合 | 天天草人人草 | 国产成人香蕉在线视频fuz | 精品免费tv久久久久久久 | 夜夜爽毛片 | www.色在线观看| 久久一区二区免费播放 | 日日碰夜夜|