数据库操作是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系统响应速度。