標籤:串連池 資料來源 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