- spring中的數據庫配置
1.使用org.springframework.jdbc.datasource.DriveManagerDataSource
1 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 2 <property name="driverClassName"> 3 <value>${jdbc.driverClassName}</value> 4 </property> 5 <property name="url"> 6 <value>${jdbc.url}</value> 7 </property> 8 <property name="username"> 9 <value>${jdbc.username}</value> 10 </property> 11 <property name="password"> 12 <value>${jdbc.password}</value> 13 </property> 14 </bean>
說明:DriverManagerDataSource建立連接是只要能建立連接就新建一個connection,根本沒有連接池的概念。
2.使用org.springframework.jndi.JndiObjectFactoryBean
1 <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 2 <property name="jndiName"> 3 <value>java:comp/env/jdbc/roseindiaDB_local</value> 4 </property> 5 </bean>
說明:JndiObjectFactoryBean能夠通過JNDI獲取DataSource,但是這種方式需要在web服務器中配置數據源,比如在tomcat的server.xml處配置數據源。
3.使用c3p0或者dbcp的池化技術配置數據源,以下用dbcp舉一個栗子。
1 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 2 <property name="driverClassName"> 3 <value>oracle.jdbc.driver.OracleDriver</value> 4 </property> 5 <property name="url"> 6 <value>jdbc:oracle:thin:@localhost:1521:orcl</value> 7 </property> 8 <property name="username"> 9 <value>test</value> 10 </property> 11 <property name="password"> 12 <value>test</value> 13 </property> 14 <property name="maxActive"> 15 <value>255</value> 16 </property> 17 <property name="maxIdle"> 18 <value>2</value> 19 </property> 20 <property name="maxWait"> 21 <value>120000</value> 22 </property> 23 </bean>
說明:這是一種推薦說明的數據源配置方式,它真正使用了連接池技術。
JDBC的數據庫連接池使用javax.sql.DataSource來表示,DataSource只是一個接口,該接口通常由服務器(Weblogic,WebSphere,Tomcat)提供實現,也有一些開源組織提供實現,如:DBCP數據庫連接池、C3P0數據庫連接池、Proxpool數據庫連接池.
對象采用池化的原因:采用池化的本意是通過減少對象生成的次數,減少花在對象初始化上面的開銷,從而提高整體性能。
使用數據庫連接池的優點:
1)資源重用:
由於數據庫連接得以重用,避免了頻繁創建,釋放連接引起的大量性能開銷。在減少系統消耗的基礎上,另一方面也增加了系統運行環境的平穩性。
2)更快的系統反應速度
數據庫連接池在初始化過程中,往往已經創建了若干數據庫連接置於連接池中備用。此時連接的初始化工作均已完成。對於業務請求處理而言,直接利用現有可用連接,避免了數據庫連接初始化和釋放過程的時間開銷,從而減少了系統的響應時間。
3)新的資源分配手段
對於多應用共享同一數據庫的系統而言,可在應用層通過數據庫連接池的配置,實現某一應用最大可用數據庫連接數的限制,避免某一應用獨占所有的數據庫資源。
4)統一的連接管理,避免數據庫連接泄露
在較為完善的數據庫連接池實現中,可根據預先的占用超時設定,強制回收被占用連接,從而避免了常規數據庫連接操作中可能出現的資源泄露。
相關的知識背景:
4.在Java開發中,使用JDBC操作數據庫的四個步驟如下:
1)加載數據庫驅動程序(class.forName("數據庫驅動類"))
2)連接數據庫(Connection conn=DriverManager.getConnection();)
3)操作數據庫(PreparedStatement stat=con.prepareStatement(sql);stat.executeQuery();)
4)關閉數據庫,釋放連接(conn.close();)
c3p0和dbcp主要解決操作數據庫中的con(即連接)的問題,而hibernate和myibatis解決的是sql(sql語句的問題)
