druid介绍

这是druid对自己的介绍:

druid

Druid是阿里开源的一个数据库连接池技术,号称自己是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。至于为什么它态度这么屌,是因为Druid确实有这个实力,Druid是在目前java技术市场中流行的连接池技术的基础上开发出来的,DBCP、C3P0这些连接池技术包含的功能Druid都有,而且它也不仅仅只是一个连接池,Druid是一个强大的JDBC组件,它包括三部分:

  • DruidDriver,能够提供基于Filter-Chain模式的插件体系。
  • DruidDataSourc,高效可管理的数据库连接池。
  • SQLParser。

Druid在原来连接池技术的基础上又添加了一些使用功能,可以说是青出于蓝而胜于蓝了,同时他自身的插件体系也使得Druid具有很好的扩展性,最关键的是,Druid依然是github上较为活跃的开源项目,版本更新也比较频繁,这一点是我个人感觉最加分的。介绍文字就到这里,本篇文章是介绍整合代码的。

druid整合

更新代码已上传到我的github里,地址点这里

首先是更新pom文件,添加druid依赖

<!-- Start: druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<!-- 版本号你自己选 -->
<version>1.0.24</version>
</dependency>
<!-- End: druid -->

更新后的数据源配置文件及参数解释:

    <!-- 数据源 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <!-- 基本属性 url、user、password -->
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>

        <!-- 配置初始化大小、最小、最大 -->
        <property name="initialSize" value="${druid.initialSize}"/>
        <property name="minIdle" value="${druid.minIdle}"/>
        <property name="maxActive" value="${druid.maxActive}"/>

        <!-- 配置获取连接等待超时的时间 -->
        <property name="maxWait" value="${druid.maxWait}"/>
        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="${druid.timeBetweenEvictionRunsMillis}" />

        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="${druid.minEvictableIdleTimeMillis}" />

<!--用来检测连接是否有效的sql,要求是一个查询语句。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会其作用。-->
        <property name="validationQuery" value="${druid.validationQuery}" />
       
        <!--申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。-->
        <property name="testWhileIdle" value="${druid.testWhileIdle}" />
        <!-- 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 -->
        <property name="testOnBorrow" value="${druid.testOnBorrow}" />
        <!-- 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能-->
        <property name="testOnReturn" value="${druid.testOnReturn}" />
        
        <!-- 打开PSCache,并且指定每个连接上PSCache的大小  如果用Oracle,则把poolPreparedStatements配置为true,mysql可以配置为false。-->
        <property name="poolPreparedStatements" value="${druid.poolPreparedStatements}" />
        <property name="maxPoolPreparedStatementPerConnectionSize" value="${druid.maxPoolPreparedStatementPerConnectionSize}" />
        <!-- 配置监控统计拦截的filters -->
        <property name="filters" value="${druid.filters}" />

    </bean>

配置文件分离

在做Druid整合的时候,感觉原来的配置文件比较乱,每次有一点更新都要去修改applicationContext.xml文件,而且applicationContext.xml文件又比较大,内容多的情况下改起配置来确实痛苦,因此就借着这次整合Druid连接池,把配置文件重新整理了一下。

原applicationContext.xml文件拆分为spring-context.xml,spring-context-mvc.xml,spring-context-mybatis.xml,jdbc-druid-config.properties文件,然后修改web.xml文件即可。

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-context.xml</param-value>
    </context-param>
    ...
        <servlet>
        <servlet-name>springMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-context-mvc.xml</param-value>
        </init-param>
        <!--加载顺序为1 -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springMVC</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

分离之后,明显赶紧结构化清晰很多,相关的配置很清楚在哪一个模块,之后需要整合加入配置也很简单清楚,需要指出的是,每个配置文件的命名及里面的配置内容都要写清楚,不要一股脑全部复制粘贴,用到什么写什么,尽可能的简化和规范配置文件,让配置文件看的明白。 配置文件分离

总结

本篇文章介绍了整合过程,同时也对Druid参数做了详细的解释,如果想继续深入了解可以去github上的druid仓库学习代码,druid仓库在这里。

本来只是想更新整合Druid模块代码的,但是过程中看到配置文件混乱,确实忍不了,于是也顺手做了修改,虽然只是做了一点事情,但是代码文件看着舒服也是极好的,接下来的文章里可能还会继续更新druid,看时间安排吧。