【SpringBoot Web框架实战教程】06 SpringBoot 整合 Druid

不积跬步,无以至千里;不积小流,无以成江海。大家好,我是闲鹤,微信:xxh_1459,十多年开发、架构经验,先后在华为、迅雷服役过,也在高校从事教学3年;目前已创业了7年多,主要从事物联网/车联网相关领域和业务。喜欢交友、骑行、写毛笔字、弹吉他、折腾硬件和写代码。

导读

这是一系列关于 SpringBoot Web框架实战 的教程,从项目的创建,到一个完整的 web 框架(包括异常处理、拦截器、context 上下文等);从0开始,到一个可以直接运用在生产环境中的web框架,所有源码均开源。

正文

我们在 [005 Spring Boot 使用 JdbcTemplate 操作数据库](https://mp.weixin.qq.com/s?__biz=MjM5MjA4NTEwNQ==&mid=2649669750&idx=1&sn=1316a8ca04189368aa7f1486ded16481&chksm=beb1c56889c64c7e731a7bec8902bac882db4fc368a44f628e30106b7fcdcca6502c3cca2fa4&token=766189631&lang=zh_CN#rd 使用的是 Spring Boot 默认的 HiKariCP 作为数据源操作数据库,本篇我们来正常 Druid 作为数据源。

Druid 简介

Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池。
Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 C3P0、DBCP 等 DB 池的优点,同时加入了日志监控。
Druid 可以很好的监控 DB 池连接和 SQL 的执行情况,天生就是针对监控而生的 DB 连接池。
Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。
Spring Boot 2.0 以上默认使用 Hikari 数据源,可以说 Hikari 与 Driud 都是当前 Java Web 上最优秀的数据源,我们来重点介绍 Spring Boot 如何集成 Druid 数据源,如何实现数据库监控。

一句话:Druid 是目前推荐使用的数据源。

引入依赖

我们在上篇 005 Spring Boot 使用 JdbcTemplate 操作数据库 源码的基础上进行修改:

pom增加:

<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.12</version>
</dependency>

修改配置文件

在原来的基础上增加:

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

删除原来的 HiKariCP 配置:

spring.datasource.hikari.minimum-idle=5

完整的配置文件:

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/app_test?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

新建配置文件

/*** Created by JDZ.* Company: Jindaozi Information Tec. Nanchang Com.* Copyright: jindaozi* Home: https://blog.uwenya.cc/category/java* Author: echo* Email: 360765409@qq.com* Date: 2022/10/12 17:39* Desc:*/
package com.jdz.config;import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.sql.DataSource;@Configuration
public class MyDuridConfig {@Bean@ConfigurationProperties(prefix = "spring.datasource")public DataSource druidDataSource() {return new DruidDataSource();}
}

到此,其他不用更改任何代码,Druid 就集成进入了我们的项目,重启项目:

file

看到 Druid 已加载成功,同样的用浏览器访问接口,也能正常的返回。

我们设置断点,也能看到 jdbcTemplate 的数据源也是 druid:
file

Druid 常用的一些配置

#初始化时建立物理连接的个数
initial-size: 5
#最小连接池数量
min-idle: 5
#最大连接池数量 maxIdle已经不再使用
max-active: 20
#获取连接时最大等待时间,单位毫秒
max-wait: 60000
#申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
test-while-idle: true
#既作为检测的间隔时间又作为testWhileIdel执行的依据
time-between-eviction-runs-millis: 60000
#销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时,关闭当前连接
min-evictable-idle-time-millis: 30000
#用来检测连接是否有效的sql 必须是一个查询语句
#mysql中为 select 'x'
#oracle中为 select 1 from dual
validation-query: select 'x'
#申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
test-on-borrow: false
#归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
test-on-return: false
# 是否缓存preparedStatement
pool-prepared-statements: true
#   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
#配置监拉统计挡成的filters. stat: 监控统计、Log4j:日志记录、waLL: 防御sqL注入
#如果启用日志记录时报错java.lang.ClassNotFoundException: org.apache.log4j.Priority
#则导入Log4j 依赖即时,Maven 地址: https://mvnrepository. com/artifact/log4j/log4
filters: stat,wall,1og4j

配置 Druid 数据源监控

Druid的最强大之处在于它有着强大的监控,可以监控我们发送到数据库的所有sql语句。方便我们后期排插错误。

/*** Created by JDZ.* Company: Jindaozi Information Tec. Nanchang Com.* Copyright: jindaozi* Home: https://blog.uwenya.cc/category/java* Author: echo* Email: 360765409@qq.com* Date: 2022/10/12 17:39* Desc:*/
package com.jdz.config;import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.sql.DataSource;@Configuration
public class MyDuridConfig {@Bean@ConfigurationProperties(prefix = "spring.datasource")public DataSource druidDataSource() {return new DruidDataSource();}/*** 配置监控服务器* @return 返回监控注册的servlet对象* @author SimpleWu*/@Beanpublic ServletRegistrationBean statViewServlet() {ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");//ServletRegistrationBean reg = new ServletRegistrationBean();//reg.setServlet(new StatViewServlet());//reg.addUrlMappings("/druid/*");// 添加IP白名单servletRegistrationBean.addInitParameter("allow", "127.0.0.1");// 添加IP黑名单,当白名单和黑名单重复时,黑名单优先级更高//servletRegistrationBean.addInitParameter("deny", "127.0.0.1");// 添加控制台管理用户servletRegistrationBean.addInitParameter("loginUsername", "admin");servletRegistrationBean.addInitParameter("loginPassword", "123456");// 是否能够重置数据servletRegistrationBean.addInitParameter("resetEnable", "false");return servletRegistrationBean;}/*** 配置服务过滤器** @return 返回过滤器配置对象*/@Beanpublic FilterRegistrationBean statFilter() {FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());// 添加过滤规则filterRegistrationBean.addUrlPatterns("/*");// 忽略过滤格式filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*,");return filterRegistrationBean;}
}

重启服务,用浏览器访问:http://localhost:8080/druid/
file

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/38598.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云centos7.9 挂载数据盘到 www目录

一、让系统显示中文 参考&#xff1a;centos7 怎么让命令行显示中文&#xff08;英文-&#xff1e;中文&#xff09;_如何在命令行中显示中文-CSDN博客 1、输入命令&#xff1a;locale -a |grep "zh_CN" 可以看到已经存在了中文包 2、输入命令&#xff1a;sudo vi…

AGPT•intelligence:带你领略全新量化交易的风采

随着金融科技的快速发展&#xff0c;量化交易已经成为了投资领域的热门话题。越来越多的投资者开始关注和使用量化交易软件来进行投资决策。在市场上有许多量化交易软件可供选择。 Delaek&#xff0c;是一位资深的金融科技专家&#xff0c;在 2020年成立一家专注于数字资产量化…

第一后裔延迟高怎么办?快速降低第一后裔延迟

第一后裔/The First Descendant一款射击游戏&#xff0c;融合了刷宝、角色扮演、团队合作、剧情等元素&#xff0c;让每个玩家都能在自己的角度上&#xff0c;找到切入点&#xff0c;并不断地成长&#xff0c;一步步解开后裔身上隐藏的秘密。近期该作正式上线&#xff0c;很多玩…

获取微信公众号所有订阅用户,并批量获取用户基本信息

获取微信公众号所有订阅用户&#xff0c;并批量获取用户基本信息 public void syncSubscribe() {String appId ApiConstants.PUBLIC_ACCOUNT_APP_ID;// 所有订阅用户List<String> openIdList getUserList(appId);// 一个批次只能查100条数据&#xff0c;将List按100的长…

vue项目创建+eslint+Prettier+git提交规范(commitizen+hooks+husk)

# 步骤 1、使用 vue-cli 创建项目 这一小节我们需要创建一个 vue3 的项目&#xff0c;而创建项目的方式依然是通过 vue-cli 进行创建。 不过这里有一点大家需要注意&#xff0c;因为我们需要使用最新的模板&#xff0c;所以请保证你的 vue-cli 的版本在 4.5.13 以上&#xff…

Debian linux忘记root密码如何重置

重启电脑, 到下图再按 e 键 在页面中可以看到有个ro的行&#xff0c;在ro行的尾部&#xff0c;添加 rw init/bin/bas 3. ctrl X 启动系统&#xff0c;最后会进入命令行模式 4. 重设root密码&#xff0c;输入命令 passwd root&#xff0c;按照提示输入新密码并确认 5. 重启系…

基于Python的自动化测试框架-Pytest总结-第一弹基础

Pytest总结第一弹基础 入门知识点安装pytest运行pytest测试用例发现规则执行方式命令行执行参数 配置发现规则 如何编写测试Case基础案例断言语句的使用pytest.fail() 和 Exceptions自定义断言函数异常测试测试类形式 pytest的Fixture使用Fixture入门案例使用fixture的Setup、T…

昇思25天学习打卡营第8天|模型训练

昇思25天学习打卡营第8天|模型训练 前言模型训练构建数据集定义神经网络模型定义超参、损失函数和优化器超参损失函数优化器 训练与评估 个人任务打卡&#xff08;读者请忽略&#xff09;个人理解与总结 前言 非常感谢华为昇思大模型平台和CSDN邀请体验昇思大模型&#xff01;从…

linux中如何启动python虚拟环境

找到python虚拟环境所在目录 执行下面的命令即可 source auth_python/bin/activate

2024自然语言处理期末回忆

2024.6.19考 总体来说&#xff0c;很离谱&#xff0c;那么多ppt&#xff0c;考之前以为肯定会考算法&#xff0c;看了好久的算法&#xff0c;结果考了很多概念题。 就是说&#xff0c;这门课很抽象&#xff0c;能不选就别选了。 1.&#xff08;1&#xff09;什么是预训练词向…

【遇坑笔记】Node.js 开发环境与配置 Visual Studio Code

【遇坑笔记】Node.js 开发环境与配置 Visual Studio Code 前言node.js开发环境配置解决pnpm 不是内部或外部命令的问题&#xff08;pnpm安装教程&#xff09; 解决 pnpm : 无法加载文件 C:\Program Files\nodejs\pnpm.ps1&#xff0c;因为在此系统上禁止运行脚本。 前言 最近部…

【代码随想录】【算法训练营】【第49天】 [300]最长递增子序列 [674]最长连续递增序列 [718]最长重复子数组

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 49&#xff0c;周二&#xff0c;坚持不了一点~ 题目详情 [300] 最长递增子序列 题目描述 300 最长递增子序列 解题思路 前提&#xff1a;最大递增子序列的长度 思路&#xff1a;动态规划 d…

基于X86+FPGA的精密加工检测设备解决方案

应用场景 随着我国高新技术的发展和国防现代化发展&#xff0c;航空、航天等领域需 要的大型光电子器件&#xff0c;微型电子机械、 光 电信息等领域需要的微型器件&#xff0c;还有一些复杂零件的加工需求日益增加&#xff0c;这些都需要借助精密甚至超精密的加工检测设备 客…

esp12实现的网络时钟校准

网络时间的获取是通过向第三方服务器发送GET请求获取并解析出来的。 在本篇博客中&#xff0c;网络时间的获取是一种自动的行为&#xff0c;当系统成功连接WiFi获取到网络天气后&#xff0c;系统将自动获取并解析得到时间和日期&#xff0c;为了减少误差每两分钟左右进行一次校…

clock时钟周期

clock时钟周期 #include <iostream> #include <ctime>int main() {clock_t start clock(); // 获取开始时间的时钟周期数// 模拟一些工作for (long long i 0; i < 10000000000; i);clock_t end clock(); // 获取结束时间的时钟周期数std::cout << &q…

web平台—apache

web平台—apache 1. 学apache前需要知道的知识点2. apache详解2.1 概述2.2 工作模式2.3 启动apache网站整体流程2.4 相关文件保存位置2.5 配置文件详解 3. apache配置实验实验1&#xff1a;设置apache的目录别名实验2&#xff1a;apache的用户认证实验3&#xff1a;虚拟主机 (重…

江门MES制造执行系统:助力工厂实现智能化管理

江门MES制造执行系统(MES)在工厂实现智能化管理方面发挥着重要作用&#xff0c;以下是它的一些助力方面&#xff1a; 实时监控与控制&#xff1a;江门MES系统可以实时监控生产过程中的各个环节&#xff0c;包括设备状态、生产进度、质量指标等&#xff0c;帮助工厂管理人员及时…

【linux】(8)文件搜索grep

grep 用于在文件中搜索指定的模式&#xff08;字符串或正则表达式&#xff09;&#xff0c;并输出匹配的行。 基本用法 grep [options] pattern [file...]常用选项 基本搜索 grep pattern filename例子&#xff1a;搜索文件 example.txt 中包含字符串 hello 的行。 grep &quo…

【vueUse库Animation模块各函数简介及使用方法】

vueUse库是一个专门为Vue打造的工具库,提供了丰富的功能,包括监听页面元素的各种行为以及调用浏览器提供的各种能力等。其中的Browser模块包含了一些实用的函数,以下是这些函数的简介和使用方法: vueUse库Sensors模块各函数简介及使用方法 vueUseAnimation函数1. useInter…

Linux相关初步运用

常用命令 Cd Ls Unzip Unrar x Mv Pwd rz sz rm -rf /root/logs/game#删除文件夹 rm -f /root/logs/game/nohup.log#删除文件 #返回上级目录cd.. #目录创建 mkdir 路径添加 Vim ~/.bash_profile #python环境变量的添加 Export PYTHONPATH$PYTHONPATH:/home/us…