引言:阿里DRUID,德鲁伊是后起之秀,因为它的优秀很快占领了使用市场,熟悉java开发的同仁应该都了解C3PO,都有很多类似之处,下边我们一起来看看德鲁伊数据源的配置以及德鲁伊监控的配置和监控的实现逻辑。
一。德鲁伊数据源配置图片案例
附:图片案例代码在本文的最后面有
附:图片案例代码在本文的最后面有
二:要使用druid监控需要做好两个配置
<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>
三:druid数据源配置详解说明
配置 | 解释说明 |
名字 | 配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。如果没有配置,将会生成一个名字,格式是:“DataSource-”+ System.identityHashCode(this) |
2. jdbcUrl | 连接数据库的url,不同数据库不一样。例如:mysql:jdbc:mysql://10.20.153.104:3306 / druid2 oracle:jdbc:oracle:thin:@ 10.20.149.85:1521:ocnauto |
3.用户名 | 连接数据库的用户名 |
密码 | 连接数据库的密码。如果你不希望密码直接写在配置文件中,可以使用ConfigFilter。详细看这里(国外网站,进入慢) https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter |
5. driverClassName | 这一项可配可不配,如果不配置德鲁伊会根据URL自动识别DBTYPE,然后选择相应的driverClassName |
6. initialSize | 初始化时建立物理连接的个数。初始化发生在显示调用初始化方法,或者第一次的getConnection时 |
7. maxActive | 最大连接池数量 |
8. minIdle | 最小连接池数量 |
9. maxWait | 获取连接时最大等待时间,单位毫秒。配置了MAXWAIT之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为真正使用非公平锁。 |
10. poolPreparedStatements | 是否缓存preparedStatement时,也就是PSCache.PSCache对支持游标的数据库性能提升巨大,比如说甲骨文。备注:在mysql5.5以下的版本中没有PSCache功能,建议关闭掉。5.5及以上版本有PSCache,建议开启。 |
11.maxOpenPreparedStatements | 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为真实的。 在德中,不会存在甲骨文下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100 |
12. validationQuery | 用来检测连接是否有效的SQL,要求是一个查询语句。如果validationQuery为空,testOnBorrow,testOnReturn,testWhileIdle都不会其作用 |
13. testOnBorrow | 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 |
14. testOnReturn | 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 |
15. testWhileIdle | 建议配置为真,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 |
16.timeBetweenEvictionRunsMillis | 有两个含义:1)Destroy线程会检测连接的间隔时间 2)testWhileIdle的判断依据,详细看testWhileIdle属性的说明 |
17. numTestsPerEvictionRun | 已过,不再使用,一个DruidDataSource只支持一个EvictionRun |
18. minEvictableIdleTimeMillis | Destory线程中如果检测到当前连接的最后活跃时间和当前时间的差值大于minEvictableIdleTimeMillis,则关闭当前连接。 |
19. connectionInitSqls | 物理连接初始化的时候执行的SQL |
20. exceptionSorter | 当数据库抛出一些不可恢复的异常时,抛弃连接 |
21.过滤器 | 属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有: 1)监控统计用的过滤器:STAT 2)日志用的过滤器:log4j的 3)防御SQL注入的过滤器:壁 |
22.proxyFilters | 类型是列表<com.alibaba.druid.filter.Filter>,如果同时配置了过滤器状语从句proxyFilters,是组合关系,并非替换关系 |
23.removeAbandoned | 对于建立时间超过removeAbandonedTimeout的连接强制关闭 |
24.removeAbandonedTimeout | 指定连接建立多长时间就需要被强制关闭 |
25.logAbandoned | 指定发生removeabandoned的时候,是否记录当前线程的堆栈信息到日志中 |
四:如何去除监控页面的广告
1)。使用过小德的同仁应该都了解,小德的监控页面加载以后,尾页是有阿里的广告的如下图所示,如果是一个商业项目这个是很不雅也是不允许的,那么我们来看看如何去除广告。去除页面上的广告需要修改druid.jar的源码文件
去除广告操作:
用winRAR打开jar包,在druid-1.1.6.jar \ support \ http \ resources \ js \ common.js路径下找到文件,修改common.js中如下图所示的代码,删除buildFooter函数中的代码即可
buildFooter : function() {
var html ='<footer class="footer">'+
' <div class="container">'+
'<a href="https://render.alipay.com/p/s/taobaonpm_click/druid_banner_click" target="new"><img src="https://render.alipay.com/p/s/taobaonpm_click/druid_banner"></a><br/>' +
' powered by <a href="https://github.com/alibaba/" target="_blank">AlibabaTech</a> & <a href="http://www.sandzhang.com/" target="_blank">sandzhang</a> & <a href="http://melin.iteye.com/" target="_blank">melin</a> & <a href="https://github.com/shrekwang" target="_blank">shrek.wang</a>'+
' </div>'+
' </footer>';
$(document.body).append(html);
},
五:Mybatis分页插件PageHelper
六:数据库连接池
德鲁伊数据源配置图片案例的详细代码,对应的是第一个图片,数据库密码需要修改
druid数据源配置图片案例的详细代码, 对应的是第一个图片, 数据库密码需要修改
server:
port: 8081
spring:
devtools:
restart:
additional-paths: classpath:*
datasource:
name: mysql_test
type: com.alibaba.druid.pool.DruidDataSource
#druid相关配置
druid:
#监控统计拦截的filters
filters: stat
driver-class-name: com.mysql.jdbc.Drive r
#基本属性
url: jdbc:mysql://39.108.160.72:3306/meiri?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
username: gdswww
password: '!#$***168998'
#配置初始化大小/最小/最大
initial-size: 1
min-idle: 1
max-active: 20
#获取连接等待超时时间
max-wait: 60000
#间隔多久进行一次检测,检测需要关闭的空闲连接
time-between-eviction-runs-millis: 60000
#一个连接在池中最小生存的时间
min-evictable-idle-time-millis: 300000
validation-query: SELECT 'x'
test-while-idle: true
test-on-borrow: false
test-on-return: false
#打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
pool-prepared-statements: false
max-pool-prepared-statement-per-connection-size: 20
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.zxzb.entity
#pagehelper
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSql
returnPageInfo: check
logging:
level:
com.zxzb.mapper: trace