資料來源與串連池的關係

來源:互聯網
上載者:User

標籤:串連池   資料來源   jndi   

   今日一直在糾結資料來源串連池,這兩個東西到底是什麼關係呢?因為看spring中配置的明明是串連池,但是術語卻叫其 資料來源,而且也沒有看到其配置資料來源,想想肯定是有原因的,遂來總結下。

   先拋開spring的配置,先來談談市場上常用的資料來源和串連池:

    資料來源:JDBC資料來源,JNDI資料來源,ODBC資料來源等(黑體比較常用);

    串連池:C3P0串連池,DBCP串連池,Porxool串連池(黑體比較常用)等


   那麼到底他們之間是什麼關係呢?

   資料來源是指資料的來源,比如資料庫。
   串連池是指這樣一個“池子”,池子中的每個東西都是串連資料來源的一個“串連”,這樣別人想串連資料來源的時候可以從這      個“池子”裡取,用完以後再放回來供以後其他想使用的人使用。


 在與資料庫打交道的過程中,每次操作資料庫都需要建立connection串連,勢必是很浪費資源的。所以解決辦法是建立串連池,初始化時往串連池中放入一定數量的串連,需要時從池中取出串連,使用完畢後將串連放回池子。

所以,串連池不是必須的,只是提高效率用的。

  1.使用JDBC資料來源(沒有串連池)

    

Class.forName("com.mysql.jdbc.Driver");String url="jdbc:mysql://localhost:3306/test";Connection connection =  DriverManager.getConnection(url,"root" ,"123");

 所以上面可以看到,不使用串連池,只需要上述幾行代碼,就可以得到connection ,但是記住,這樣子是很浪費資源的。


2.使用JNDI資料來源

  JNDI資料來源的使用,一定是要放在web項目裡面的(不考慮spring的配置),也就是要經過伺服器的配置,這點讓我摸索了很久。

  既然要經過伺服器的話,那麼我是tomcat,在conf中context.xml中加入如下:

 <Resource name="mydataSource" auth="Container" type="javax.sql.DataSource"                   url="jdbc:mysql://localhost:3306/test"                driverClassName="com.mysql.jdbc.Driver"                password="123"                username="root"                initialSize="2"                maxActive="3"                maxIdle="1"                minIdle="1"                maxWait="10000"                removeAbandoned="true"                logAbandoned="true"                removeAbandonedTimeout="60"                timeBetweenEvictionRunsMillis="900000"                minEvictableIdleTimeMillis="1800000"                numTestsPerEvictionRun="100"                validationQuery="select count(0) from dual"                poolPreparedStatements="true"                maxOpenPreparedStatements="100"/>

 對上面配置相關解釋

資料庫相關:username,password,driverClassName,url

 jndi相關name,type,factory

tomcat也允許採用其他串連實現,不過預設使用dbcp串連池,即factory預設為org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory

串連數控制與串連歸還策略:maxActive,maxIdle,minIdle,maxWait

應對網路不穩定的策略:testOnBorrow,validationQuery

應對串連泄漏的策略:removeAbandoned,removeAbandonedTimeout,logAbandoned


網上很多資料說:使用JNDI資料來源時,還需要在tomcat的server.xml和項目的web.xml中加入其它的東東,具體加入什麼網上都可以百度到,但是實踐證明是不需要的。

下面的代碼調用JNDI資料來源:

 Context it = new  InitialContext(); DataSource ds = (DataSource) it.lookup("java:comp/env/mydataSource"); Connection conn = ds.getConnection();

注意:lookup方法中的內容  java:comp/env/為固定寫法,後面跟具體的dataSource名稱


下一篇文章中,將會仔細講講spring怎樣配置資料來源(串連池)



 

本文出自 “bulajunjun” 部落格,請務必保留此出處http://5148737.blog.51cto.com/5138737/1430384

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.