作者:高元_G·Marshal于 2017年06月22日 发布在分类 / 开发技术 / Java 下,并于 2017年06月22日 编辑
    Druid的简单使用-数据库连接池

       792

       0



    前言

    Druid是一个JDBC组件,它包括三部分: 

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

    Druid可以做什么? 
        1) 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。 
        2) 替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。 
        3) 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。 
        4) SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。 

    扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter-Chain机制,很方便编写JDBC层的扩展插件。 



    引入依赖

    <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.0.11</version>
    </dependency>


    配置spring

    <!-- 数据源 -->


    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    <!-- 数据源驱动类可不写,Druid默认会自动根据URL识别DriverClass -->
    <property name="driverClassName" value="${jdbc.driver}" />
    <!-- 基本属性 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}" />

    <property name="validationQuery" value="${druid.validationQuery}" />
    <property name="validationQueryTimeout" value="${druid.validationQueryTimeout}" />
    <property name="testWhileIdle" value="${druid.testWhileIdle}" />
    <property name="testOnBorrow" value="${druid.testOnBorrow}" />
    <property name="testOnReturn" value="${druid.testOnReturn}" />
    <property name="removeAbandoned" value="${druid.removeAbandoned}" />
    <property name="removeAbandonedTimeout" value="${druid.removeAbandonedTimeout}" />
    <property name="logAbandoned" value="${druid.logAbandoned}" />

    <!-- 打开PSCache,并且指定每个连接上PSCache的大小 oracle=true mysql=false -->
    <property name="poolPreparedStatements" value="${druid.poolPreparedStatements}" />
    <property name="maxPoolPreparedStatementPerConnectionSize" value="${druid.maxPoolPreparedStatementPerConnectionSize}" />

    <!-- 配置监控统计拦截的filters -->
    <property name="filters" value="${druid.filters}" />
    </bean>

    配置文件 config.properties部分内容如下:

    # Mysql 配置

    jdbc.type=mysql
    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://192.168.1.114:3306/yingdan_db?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false
    jdbc.username=root
    jdbc.password=

    #druid datasource
    druid.initialSize=10
    druid.minIdle=10
    druid.maxActive=50
    druid.maxWait=600000
    druid.timeBetweenEvictionRunsMillis=30000
    druid.minEvictableIdleTimeMillis=150000
    druid.validationQuery=SELECT 'x' FROM DUAL
    druid.validationQueryTimeout=3600
    druid.testWhileIdle=true
    druid.testOnBorrow=false
    druid.testOnReturn=false
    druid.removeAbandoned=true
    druid.removeAbandonedTimeout=1800
    druid.logAbandoned=true
    druid.poolPreparedStatements=true
    druid.maxPoolPreparedStatementPerConnectionSize=20
    druid.filters=wall,stat


    配置web.xml


    <servlet>
          <servlet-name>DruidStatView</servlet-name>
          <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
    </servlet>
    <servlet-mapping>
          <servlet-name>DruidStatView</servlet-name>
          <url-pattern>/druid/*</url-pattern>
    </servlet-mapping> 


    配置监控页面访问密码

    需要配置Servlet的 loginUsername 和 loginPassword这两个初始参数。

    具体可以参考: 为Druid监控配置访问权限(配置访问监控信息的用户与密码)

    示例如下:

    <!-- 配置 Druid 监控信息显示页面 -->
    <servlet>
    <servlet-name>DruidStatView</servlet-name>
    <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
    <init-param>
    <!-- 允许清空统计数据 -->
    <param-name>resetEnable</param-name>
    <param-value>true</param-value>
    </init-param>
    <init-param>
    <!-- 用户名 -->
    <param-name>loginUsername</param-name>
    <param-value>druid</param-value>
    </init-param>
    <init-param>
    <!-- 密码 -->
    <param-name>loginPassword</param-name>
    <param-value>druid</param-value>
    </init-param>
    </servlet>
    <servlet-mapping>
    <servlet-name>DruidStatView</servlet-name>
    <url-pattern>/druid/*</url-pattern>
    </servlet-mapping>


    配置allow和deny

    StatViewSerlvet展示出来的监控信息比较敏感,是系统运行的内部情况,如果你需要做访问控制,可以配置allow和deny这两个参数。比如:


    <servlet>
    <servlet-name>DruidStatView</servlet-name>
    <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
    <init-param>
    <param-name>allow</param-name>
    <param-value>128.242.127.1/24,128.242.128.1</param-value>
    </init-param>
    <init-param>
    <param-name>deny</param-name>
    <param-value>128.242.127.4</param-value>
    </init-param>

    </servlet>

    判断规则

    • deny优先于allow,如果在deny列表中,就算在allow列表中,也会被拒绝。
    • 如果allow没有配置或者为空,则允许所有访问

    ip配置规则

    配置的格式

    <IP>
      或者
      <IP>/<SUB_NET_MASK_size>

    其中

    128.242.127.1/24

    24表示,前面24位是子网掩码,比对的时候,前面24位相同就匹配。

    不支持IPV6

    由于匹配规则不支持IPV6,配置了allow或者deny之后,会导致IPV6无法访问。

    配置resetEnable

    在StatViewSerlvet输出的html页面中,有一个功能是Reset All,执行这个操作之后,会导致所有计数器清零,重新计数。你可以通过配置参数关闭它。


    <servlet>
    <servlet-name>DruidStatView</servlet-name>
    <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
    <init-param>
    <param-name>resetEnable</param-name>
    <param-value>false</param-value>
    </init-param>
    </servlet>


    来源:http://www.cnblogs.com/xuerong/p/5522806.html


    访问权限

    创建人 高元_G·Marshal
    文档编辑权限 创建者私有
    文档阅读权限 来自分类
    分类阅读权限 所有人
    分类编辑权限 所有人
    分类审核权限
    标签

    数据库连接池
    历史版本

    修改日期 修改人 备注
    2017-06-22 10:56:37[当前版本] 高元_G·Marshal 补充druid基础介绍
    2017-06-22 10:47:48 高元_G·Marshal 补充spring与配置文件
    2017-06-22 10:39:28 高元_G·Marshal CREAT
    同类知识
    相关知识

    睿恒知识库-V3.2.0