文档章节

druid.pool.DruidDataSource 配置

之渊
 之渊
发布于 2017/05/03 18:15
字数 1138
阅读 86
收藏 0

目前来说,还是阿里巴巴 druid 连接池好用,而且有人维护,文档也比较多。。。 因此 项目就 换成了 该 连接池 下面是我的配置:

 <!-- 通常来说,只需要修改initialSize、minIdle、maxActive。
 	如果用Oracle,则把poolPreparedStatements配置为true,mysql可以配置为false。
 	分库分表较多的数据库,建议配置为false。
 	  -->
 	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> 
      
      <!-- 基本属性 url、user、password -->
      <property name="url" value="${db.url}" />
      <property name="username" value="${db.username}" />
      <property name="password" value="${db.password}" />
      
      <!--指定数据库类型,为了防止bug和添加插件的时候出错  -->
      <property name="dbType" value="${jdbc.dbType}" /> 
        
      <!-- 配置初始化大小、最小、最大 -->
      <property name="initialSize" value="5" />
      <property name="minIdle" value="5" /> 
      <property name="maxActive" value="30" />
   
      <!-- 配置获取连接等待超时的时间 -->
      <property name="maxWait" value="60000" />
   
      <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
      <property name="timeBetweenEvictionRunsMillis" value="60000" />
   
      <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
      <property name="minEvictableIdleTimeMillis" value="300000" />
    
      <property name="validationQuery" value="${db.houseKeepingTestSql}" />
      <property name="testWhileIdle" value="true" />
      
      <!--下面两个开启会影响性能  -->
      <property name="testOnBorrow" value="false" />
      <property name="testOnReturn" value="false" />
   
      <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
      <property name="poolPreparedStatements" value="true" />
      <property name="maxPoolPreparedStatementPerConnectionSize" value="30" />
   
      <!-- 配置监控统计拦截的filters,防止SQL注入和统计配置,目前感觉还用不上,也懒得配置 -->
      <!-- <property name="filters" value="stat,wall" />  -->
      
      <!-- 说明使用log4j记录日志,不加上也可以 过滤器Log4jFilter指定了log4j  -->
      <!-- <property name="filters" value="log4j" /> -->
      
      <!--配置代理类和  name="filters" 的配置要的效果是一样的  -->
      <property name="proxyFilters">
        <list>
            <ref bean="log-filter"/>
            <ref bean="stat-filter" />
        </list>
    </property> 
      
  </bean>
  
  	<!-- SQL,DB日志记录配置,就算没有配置,默认也是会把异常给抛出然后被日志给记录到的  -->
  	<bean id="log-filter" class="com.alibaba.druid.filter.logging.Log4jFilter">
  	<!-- 所有Statement发生异常的日志记录  -->
    <property name="statementLogErrorEnabled" value="true" />
    <!-- 所有连接上发生异常的日志 -->
     <property name="connectionLogErrorEnabled" value="true" />
	</bean>
	
	<!--将执行效率是3s或者以上的SQL打印记录下来 ,默认3S,日志级别error级别  -->
	<bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
	<property name="slowSqlMillis" value="3000" />
	<property name="logSlowSql" value="true" />
	</bean>

上面的 配置 都是 参考 druid 的 git 上面给出的 通用配置 修改的。 参考地址: https://github.com/alibaba/druid/ 以及参考地址: https://segmentfault.com/a/1190000005642328 其实上面的 很多配置都是 看看百度,和 git文档都是很好配置的。。 主要的配置还是 log 的配置。 从百度和git 上面的 log配置好多种的,,, 很容易就看懵B 的,不知道用那种。。。 而我的随便测试过好, 感觉就是 log配置好多种配置 其实都是重复的,,,都是差不多的配置,只要有其中一种配置即可。 首先,不过是否配置有 filter 那么出现异常的时候,都是会把 异常的信息给 打印到log的,基本是 error 基本的。只要 log配置了 error 级 别的即可。 然后就到 慢查询的日志了 stat , 如果 配置有 <bean id="log-filter" class="com.alibaba.druid.filter.logging.XXXFilter"> 那么在 项目的对应的 log的配置文件里面就算配置了 druid 也是没用的, 因为 com.alibaba.druid.filter.logging.XXXFilter 已经指定了 使用 那种日志进行打压了。。。看了一下他的源码,,,异常,或者是 慢查询的SQL 的级别 都是error 级别的,因此 配置没有配置都没有关系。。因为很多时候我们需要的只是异常的和慢查询的SQL 。。。 至于其他正常的打印就是 debug 级别了。。 这时候 如果要打印的话,,只要开启系统的日志打印级别是 bebug以上的基本。。。或者 将 druid的 日志的bebug级别以上的打印到某个日志文件里面即可。 。。。我的意思就是 不用 管 系统 log配置。。。 当然如果要的话。。。可以参考; 这里是 log4j.xml 的


<appender name="WARN" class="org.apache.log4j.DailyRollingFileAppender">
		<param name="File" value="/web/logs/ehrweb/warn.log"/>
		<param name="Append" value="true"/>
		<param name="Encoding" value="utf-8"/>
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="[SKG.com] %-d{yyyy-MM-dd HH:mm:ss} %-5p %-15c{1}: %m%n"/>
		</layout>
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="LevelMin" value="debug" />
			<param name="LevelMax" value="WARN" />
		</filter>
	</appender>

<!--连接池日志配置拦截,不配置其实也是可以打印的,因为datasouce已经制定了log4j了   -->
	<!--  <logger name="log4j.logger.druid.sql.Statement">
		 <level value="DEBUG"/> 
                    这里可以再配置指定 打印都那个日志
                 <!--打印到对应的配置是 name=WARN的 日志文件里面  -->
    	   <appender-ref ref="WARN"/>  
	</logger>
	<logger name="log4j.logger.druid.sql.Connection">
		 <level value="WARN"/> 
	</logger>
	<logger name="log4j.logger.druid.sql">
		 <level value="WARN"/> 
	</logger>
	<logger name="log4j.logger.druid.sql.DataSource">
		 <level value="WARN"/> 
	</logger>
	<logger name="log4j.logger.druid.sql.ResultSet">
		 <level value="WARN"/> 
	</logger> 
	   -->
	   
	<logger name="com.alibaba.druid"> 
	 <level value="WARN"/> 
	</logger>

© 著作权归作者所有

之渊
粉丝 12
博文 569
码字总数 165824
作品 0
佛山
程序员
私信 提问

暂无文章

ucos 中断,调度,互斥 分析

实际场景: 首先有个标志位 pps_flag,是一个全局变量。有两个地方会用到这个变量,一个是pps信号触发的外部中断,一个是ucos的任务。当pps信号触发外部中断的时候pps_flag被置为2,当任务里面...

青春无极限
5分钟前
0
0
spark streaming、flink和storm区别浅析

1. 介绍 这三个计算框架常常被拿来比较。从我的角度来看,三者的比较可以分为两类(mini-batches vs. streaming)。spark streaming属于微批量的伪流式准实时计算框架(spark本身属于批处理框架...

xiaomin0322
13分钟前
0
0
存储过程无参数,in,out ,in out 的用法

select * from scott.emp where empno=7839 or empno=7566 select * from emp5 create table emp5 as select * from scott.emp -----------------in create or replace procedure raisesalar......

颜丽
今天
2
0
SOFAJRaft-RheaKV 是如何使用 Raft 的 | SOFAJRaft 实现原理

SOFAStack Scalable Open Financial Architecture Stack 是蚂蚁金服自主研发的金融级分布式架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。 本文为《剖...

SOFAStack
今天
2
0
同一父类,不同子类集合可判断该元素组是否相等

判断集合是否相等时只关注元素是否相等,无需考虑类型,即同调父类AbstractList里的equal方法 源码如下: public boolean equals(Object o) { if (o == this) return true; if (!(o instance...

恋码之子
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部