写作时间:2019-08-13
Spring Boot: 2.1 ,JDK: 1.8, IDE: IntelliJ IDEA

说明

Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。功能强大,能防SQL注入,内置Logging能诊断Hack应用行为。 – Alibaba Druid 官方介绍

经过阿里巴巴各大系统的考验,值得信赖

实用的功能

  1. 详细的监控(真的是全面)
  2. ExceptionSorter,针对主流数据库的返回码都有支持
  3. SQL注入
  4. 内置加密配置
  5. 众多扩展点,方便进行定制

细节请参考官网

工程建立

参照教程【SpringBoot 2.1 | 第一篇:构建第一个SpringBoot工程】新建一个Spring Boot项目,名字叫demodbdruid。

在Dependency中选择
Developer Tools > Lombok
Web > Spring Web Starter
SQL > H2 DataBase / JDBC API
Ops > Spring Boot Actuator。

新建建立连接前后的 Filter

com.zgpeace.demodbdruid.ConnectionLogFilter

package com.zgpeace.demodbdruid;import com.alibaba.druid.filter.FilterChain;
import com.alibaba.druid.filter.FilterEventAdapter;
import com.alibaba.druid.proxy.jdbc.ConnectionProxy;
import lombok.extern.slf4j.Slf4j;import java.util.Properties;@Slf4j
public class ConnectionLogFilter extends FilterEventAdapter {@Overridepublic void connection_connectBefore(FilterChain chain, Properties info) {super.connection_connectBefore(chain, info);log.info("BEFORE CONNECTION!");}@Overridepublic void connection_connectAfter(ConnectionProxy connection) {super.connection_connectAfter(connection);log.info("AFTER CONNECTION!");}
}

说明: 这里为建立连接前后的拦截处理,除了connection的拦截,还有statement等操作的拦截

Controller自定义DataSource

com.zgpeace.demodbdruid.DemodbdruidApplication

package com.zgpeace.demodbdruid;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.jdbc.core.JdbcTemplate;import javax.sql.DataSource;@SpringBootApplication
@Slf4j
public class DemodbdruidApplication implements CommandLineRunner {@Autowiredprivate DataSource dataSource;@Autowiredprivate JdbcTemplate jdbcTemplate;public static void main(String[] args) {SpringApplication.run(DemodbdruidApplication.class, args);}public void run(String... args) throws Exception {log.info(dataSource.toString());}
}

注意:Application类实现接口CommandLineRunner, 否则没有override方法run.

配置信息

application.properties

spring.output.ansi.enabled=ALWAYS
spring.datasource.url=jdbc:h2:mem:foo
spring.datasource.username=sa
spring.datasource.password=n/z7PyA5cvcXvs8px8FVmBVpaRyNsvJb3X7YfS38DJrIg25EbZaZGvH4aHcnc97Om0islpCAPc3MqsGvsrxVJw==
spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.filters=conn,config,stat,slf4j
spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=${public-key}
spring.datasource.druid.filter.config.enabled=true
spring.datasource.druid.test-on-borrow=true
spring.datasource.druid.test-on-return=true
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.validation-query=SELECT 1
public-key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALS8ng1XvgHrdOgm4pxrnUdt3sXtu/E8My9KzX8sXlz+mXRZQCop7NVQLne25pXHtZoDYuMh3bzoGj6v5HvvAQ8CAwEAAQ==

参数解析:

  1. spring.datasource.druid.initial-size=5 初始化5条连接
  2. spring.datasource.druid.validation-query=‘SELECT 1’ 验证连接是否可用,使用的SQL语句(没有配置这项启动报错:validationQuery not set druid)
  3. spring.datasource.druid.testWhileIdle = “true” 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除.
  4. spring.datasource.druid.test-on-borrow = “false” 借出连接时不要测试,否则很影响性能

druid-filter.properties

druid.filters.conn = com.zgpeace.demodbdruid.ConnectionLogFilter

启动成功,查看数据库信息

Init DruidDataSource
c.z.demodbdruid.ConnectionLogFilter      : BEFORE CONNECTION!
c.z.demodbdruid.ConnectionLogFilter      : AFTER CONNECTION!
c.z.demodbdruid.ConnectionLogFilter      : BEFORE CONNECTION!
c.z.demodbdruid.ConnectionLogFilter      : AFTER CONNECTION!
c.z.demodbdruid.ConnectionLogFilter      : BEFORE CONNECTION!
c.z.demodbdruid.ConnectionLogFilter      : AFTER CONNECTION!
c.z.demodbdruid.ConnectionLogFilter      : BEFORE CONNECTION!
c.z.demodbdruid.ConnectionLogFilter      : AFTER CONNECTION!
c.z.demodbdruid.ConnectionLogFilter      : BEFORE CONNECTION!
c.z.demodbdruid.ConnectionLogFilter      : AFTER CONNECTION!
com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
o.s.b.a.e.web.EndpointLinksResolver      : Exposing 2 endpoint(s) beneath base path '/actuator'
o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
c.z.demodbdruid.DemodbdruidApplication   : Started DemodbdruidApplication in 2.743 seconds (JVM running for 3.183)
c.z.demodbdruid.DemodbdruidApplication   : {CreateTime:"2019-08-14 08:08:48",ActiveCount:0,PoolingCount:5,CreateCount:5,DestroyCount:0,CloseCount:0,ConnectCount:0,Connections:[{ID:1658578510, ConnectTime:"2019-08-14 08:08:49", UseCount:0, LastActiveTime:"2019-08-14 08:08:49"},{ID:1828676092, ConnectTime:"2019-08-14 08:08:49", UseCount:0, LastActiveTime:"2019-08-14 08:08:49"},{ID:1846307450, ConnectTime:"2019-08-14 08:08:49", UseCount:0, LastActiveTime:"2019-08-14 08:08:49"},{ID:1182492749, ConnectTime:"2019-08-14 08:08:49", UseCount:0, LastActiveTime:"2019-08-14 08:08:49"},{ID:2075074394, ConnectTime:"2019-08-14 08:08:49", UseCount:0, LastActiveTime:"2019-08-14 08:08:49"}]
}

注释:看到启动创建了5个连接

总结

恭喜你,学会了配置Druid连接池,已经拦截处理建立connection。
代码下载:

https://github.com/zgpeace/Spring-Boot2.1/tree/master/db/demodbdruid

参考

https://github.com/geektime-geekbang/geektime-spring-family/tree/master/Chapter%202/multi-datasource-demo
https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html
https://chrome.google.com/webstore/detail/jsonview/chklaanhfefbnpoihckbnefhakgolnmc?hl=zh-cn

易筋SpringBoot 2.1 | 第十五篇:SpringBoot连接池Druid相关推荐

  1. 【笑小枫的SpringBoot系列】【十五】SpringBoot根据模板生成Word

    通过maven引入需要的依赖 <dependency><groupId>org.springframework.boot</groupId><artifact ...

  2. 坚持的力量 第十五篇

    第十五篇        漩涡鸣人 从他身上,我看到了进步和向上的力量,经别人推荐,我发现我渐渐的喜欢上了<火影忍者>. 首先,<火影>中的歌曲很有震撼力和穿透力,产生心灵的共鸣 ...

  3. 秒杀多线程第十五篇 关键段,事件,互斥量,信号量的“遗弃”问题

    秒杀多线程第十五篇 关键段,事件,互斥量,信号量的"遗弃"问题 在<秒杀多线程第九篇 经典线程同步总结 关键段 事件 互斥量 信号量>中对经典多线程同步互斥问题进行了回 ...

  4. CCIE理论-第十五篇-IPV6-重分布+ACL+前缀列表

    CCIE理论-第十五篇-IPV6-重分布+ACL+前缀列表 重分布前面讲过,这里再讲一次+实操+效果看看 在ipv6中重分布直连路由是需要加上include-connected的 环境 就这么简单哈, ...

  5. CCIE-LAB-第十五篇-IPV6-BGP+VPN6+RT

    CCIE-LAB-第十五篇-IPV6-BGP+VPN6+RT 实际中,思科只会给你5个小时去做下面的全部配置 这个是CCIE-LAB的拓扑图 问题 翻译: 根据这些要求,将IPV6连接从总部通过SP扩 ...

  6. CCNP-第十五篇-VXLAN(一)

    CCNP-第十五篇-VXLAN(一) 到了这个阶段呢,怎么说呢,简单的NP级别的交换我都跳过去了,但是后期会补, 所以这个衔接可能新手或者不会的看的有的迷茫 但是出自个人原因只好这么干了,VXLAN3 ...

  7. CCNA-第十五篇-DHCP配置+SDN介绍(最后一章)

    CCNA-第十五篇-DHCP配置+SDN介绍 各位好,如果有一直看下来的谢谢支持 这里是CCNA的最后一篇了,如果真的能吸收很多内容,那么普通的东西基本上都没什么大问题了.除非就是工作经验 下一篇就到 ...

  8. python连载第十五篇~史上最全列表知识源码+答案

    #2017-12-19 19:34:41 December Tuesday the 51 week, the 353 day #python连载第十五篇~list列表#列表定义,访问,索引,操作,切片 ...

  9. Python之路【第十五篇】:Web框架

    Python之路[第十五篇]:Web框架 Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 1 2 3 4 5 6 7 ...

  10. 第七十五篇:学术论文写作技巧

    第七十五篇:学术论文写作技巧 论文写作技巧 下载 论文写作技巧 最近听了一下网课,把大牛们的论文讲课记录和网上一些关于论文写作技巧的文章总结了一下.总结了一些关于论文的润色.语法.投稿.回复审稿人等需 ...

最新文章

  1. lintcode-34-N皇后问题 II
  2. Common tasks for MySQL
  3. spring学习笔记---Jackson的使用和定制
  4. 【渝粤教育】广东开放大学 现代服务业管理 形成性考核 (21)
  5. Android软件开发-ProgressBar
  6. 怎么判断自己是不是备胎 ?
  7. 易点汽车租赁服务器无响应,全部服务器无响应!!!
  8. paip.多线程调用静态方法错乱的解决
  9. 传统的 IT 销售渠道将会走向末路?
  10. 如何对Firefox拓展程序进行修改
  11. 实现关联条件的casewhen效果
  12. 【Java基础知识 17】聊一聊同步代码块
  13. python是一门_人人用Python 篇一:Python是一门人人可掌握的手艺
  14. 一周9本上榜新书推荐:软件调试、机器学习成为本周最亮的星
  15. TSINGSEE青犀视频开发人脸识别技术实现过程中的的难点汇总
  16. java.net.ConnectException: [NACOS HTTP-POST] The maximum number of tolerable server reconnection err
  17. (个人解题思路系列)五子棋
  18. Hive中的in、exists和left semi join
  19. correl函数相关系数大小意义_用Correl函数返回相关系数,以确定属性关系 Excel用Correl函数返回相关系数以确...
  20. 如何理解金融中的 “头寸”

热门文章

  1. 安卓开发 在oncreate显示对话框 hide 之后 点不动_微信小程序云开发教程微信小程序的API入门常用API...
  2. java布尔类型 向上转型_JAVA_多态性演示a____自动向上转型、向下转型、检查对象是否为某个类型(instanceof)...
  3. Linux系统提高编辑效率的vim工具重要知识
  4. vue插件开发练习--实用弹窗
  5. Linux 三个强大的系统资源监控工具
  6. vs2010 “SetScrollSizes”: 找不到标识符
  7. 老人为啥怒砸30辆车
  8. SQL2005企业版详细部署(一)
  9. Spring Boot入门(5)-表单验证
  10. 悟空 mobile.php,悟空CRM无需任何权限的SQL注入漏洞2(ThinkPHP特性)