數據庫操作是Java後臺開發過程中最爲重要的一部分,快速、穩定、安全的訪問數據庫能夠大大提升服務器的響應速度。我們剛開始接觸Java開發時都學過JDBC操作數據庫。對於一個簡單的數據庫應用,需要訪問數據庫時,就新創建一個連接,用完後就關閉它,這種情況下佔用系統資源不高,不會出現性能瓶頸。但是對於一個複雜的數據庫應用,頻繁的建立、關閉連接,會消耗大量的系統資源,非常容易使系統的性能陷入瓶頸。
數據庫連接池的使用則能夠極大地提升系統的性能,更爲合理的操作數據庫。它具有幾點優勢:1)資源重用 2)更快的系統響應速度 3)新的資源分配手段 4)統一的連接管理,避免數據庫連接泄露。
常用的數據庫連接池有DBCP、C3P0、Proxool、Druid等等。其中Druid連接池阿里巴巴的一個數據庫連接池開源框架,它具有豐富的擴展功能,能夠穩定的訪問數據庫;同時還具有強大的數據庫監控功能,能夠幫助我們優化一些慢sql,可以通過可視化界面觀察sql執行情況。下面將介紹介紹一下Durid的配置。
1. 依賴的jar包
<!-- 連接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.19</version>
</dependency>
2.spring xml文件配置
<!-- 配置數據源 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:ora11g"/>
<property name="username" value="admin"/>
<property name="password" value="manager"/>
<property name="validationQuery" value="select 1 from dual"/>
<property name="testWhileIdle" value="true" />
<!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連接,單位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<!-- 配置一個連接在池中最小生存的時間,單位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="120000" />
<!--maxActive: 最大連接數量 -->
<property name="maxActive" value="20"/>
<!--initialSize: 初始化連接 -->
<property name="initialSize" value="1"/>
<!-- 開啓Druid的監控統計功能 -->
<property name="filters" value="stat" />
</bean>
註釋:
(1) validationQuery屬性:用來檢測連接是否有效的sql。如果validationQuery爲null,testOnBorrow、testOnReturn、testWhileIdle都不會其作用。這個開啓的話會增加數據庫的壓力,因爲每次訪問數據庫都要測試連接是否可用。(曾遇到現場數據庫和web應用不在同一臺服務器上,連接不穩定,總是發生數據庫連接終端異常....加上這個跟配置好點...最後發現是網關定時切段數據庫連接問題..)
3.監控界面 web.xml配置
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
<init-param>
<!-- 用戶名 -->
<param-name>loginUsername</param-name>
<param-value>admin</param-value>
</init-param>
<init-param>
<!-- 密碼 -->
<param-name>loginPassword</param-name>
<param-value>manager</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>
4.監控界面訪問路徑
http://[ip]:[port]/項目名/druid/sql.html
當在web系統進行數據操作時,就能從上面監控界面中觀察到sql執行情況,從而優化sql語句,更好的提升web系統響應速度。