Spring Boot Druid 数据库连接池入门

1. Druid 单数据源

 1.1 引入依赖

   在 pom.xml 文件中,引入相关依赖。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.3.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><modelVersion>4.0.0</modelVersion><artifactId>lab-19-datasource-pool-druid-single</artifactId><dependencies><!-- 保证 Spring JDBC 的依赖健全 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!-- 实现对 Druid 连接池的自动化配置 --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.21</version></dependency><dependency> <!-- 本示例,我们使用 MySQL --><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.48</version></dependency><!-- 实现对 Spring MVC 的自动化配置,因为我们需要看看 Druid 的监控功能 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 方便等会写单元测试 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies></project>

1.2 应用配置文件

在 application.yml 中,添加 Druid 配置,如下:

spring:# datasource 数据源配置内容,对应 DataSourceProperties 配置属性类datasource:url: jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8driver-class-name: com.mysql.jdbc.Driverusername: root # 数据库账号password: # 数据库密码type: com.alibaba.druid.pool.DruidDataSource # 设置类型为 DruidDataSource# Druid 自定义配置,对应 DruidDataSource 中的 setting 方法的属性druid:min-idle: 0 # 池中维护的最小空闲连接数,默认为 0 个。max-active: 20 # 池中最大连接数,包括闲置和使用中的连接,默认为 8 个。filter:stat: # 配置 StatFilter ,对应文档 https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilterlog-slow-sql: true # 开启慢查询记录slow-sql-millis: 5000 # 慢 SQL 的标准,单位:毫秒stat-view-servlet: # 配置 StatViewServlet ,对应文档 https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatViewServlet%E9%85%8D%E7%BD%AEenabled: true # 是否开启 StatViewServletlogin-username: yudaoyuanma # 账号login-password: javaniubi # 密码
  • spring.datasource 配置项,设置 Spring 数据源的通用配置。其中,spring.datasource.type 配置项,需要主动设置使用 DruidDataSource 。因为默认情况下,spring-boot-starter-jdbc 的 DataSourceBuilder 会按照 DATA_SOURCE_TYPE_NAMES 的顺序,尝试推断数据源的类型。
  • spring.datasource.druid 配置项,设置 Druid 连接池的自定义配置。然后 DruidDataSourceAutoConfigure 会自动化配置 Druid 连接池。
    • 在 《Druid —— 配置属性》 和 《DruidDataSource 配置属性列表》 下,提供了各种 Druid 的配置项,胖友可以自己看看。
    • filter.stat 配置项,我们配置了 Druid StatFilter ,用于统计监控信息。对应文档 《Druid —— 配置_StatFilter》 。要注意,StatFilter 并不是我们说的 javax.servlet.Filter ,而是 Druid 提供的 Filter 拓展机制。
    • filter.stat-view-servlet 配置项,我们配置了 Druid StatViewServlet ,用于提供监控信息的展示的 html 页面和 JSON API 。对应文档 《Druid —— 配置_StatViewServlet 配置》 。StatViewServlet 就是我们说的 javax.servlet.Filter 

1.3 Application

创建 Application.java 类,配置 @SpringBootApplication 注解即可。代码如下:

@SpringBootApplication
public class Application implements CommandLineRunner {private Logger logger = LoggerFactory.getLogger(Application.class);@Autowiredprivate DataSource dataSource;public static void main(String[] args) {// 启动 Spring Boot 应用SpringApplication.run(Application.class, args);}@Overridepublic void run(String... args) {logger.info("[run][获得数据源:{}]", dataSource.getClass());}}

执行日志如下:

2019-11-12 19:34:12.079  INFO 48359 --- [           main] c.a.d.s.b.a.DruidDataSourceAutoConfigure : Init DruidDataSource
2019-11-12 19:34:12.156  INFO 48359 --- [           main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited2019-11-12 19:34:12.560  INFO 48359 --- [           main] c.i.s.lab19.datasourcepool.Application   : [run][获得数据源:class com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceWrapper]

1.4 监控功能

因为我们在 1.2应用配置 中,做了如下操作:

  • 通过 spring.datasource.filter.stat 配置了 StatFilter ,统计监控信息。
  • 通过 spring.datasource.filter.stat-view-servlet 配置了 StatViewServlet ,提供监控信息的展示的 html 页面和 JSON API 。

所以我们在启动项目后,访问 http://127.0.0.1:8080/druid 地址,可以看到监控 html 页面。如下图所示:

  • 在界面的顶部,提供了数据源、SQL 监控、SQL 防火墙等等功能。

  • 每个界面上,可以通过 View JSON API 获得数据的来源。同时,我们可以在 JSON API( http://127.0.0.1:8080/druid/api.html ) 菜单对应的界面中,看到 StatViewServlet 内置的监控信息的 JSON API 列表。

  • 因为监控信息是存储在 JVM 内存中,在 JVM 进程重启时,信息将会丢失。如果我们希望持久化到 MySQL、Elasticsearch、HBase 等存储器中,可以通过 StatViewServlet 提供的 JSON API 接口,采集监控信息。另外,有个 druid-aggregated-monitor 开源项目,提供了 集中监控分布式服务中的 Druid 连接池的方案和思路。

  • 如果 StatViewServlet 提供的 JSON API 接口,无法满足我们的诉求,我们可以通过自定义 API 接口,使用 DruidStatManagerFacade 获得监控信息。使用示例 DruidStatController 代码如下

@RestController
public class DruidStatController {@GetMapping("/monitor/druid/stat")@Deprecatedpublic Object druidStat(){// `DruidStatManagerFacade#getDataSourceStatDataList()` 方法,可以获取所有数据源的监控数据。// 除此之外,DruidStatManagerFacade 还提供了一些其他方法,你可以按需选择使用。return DruidStatManagerFacade.getInstance().getDataSourceStatDataList();}}

当然,绝大多数情况下,我们并不需要做这方面的拓展

2. Druid 多数据源

和 1.1引入依赖 是一致。

5.2 应用配置

在 application.yml 中,添加 Druid 配置,如下:

spring:# datasource 数据源配置内容datasource:# 订单数据源配置orders:url: jdbc:mysql://127.0.0.1:3306/test_orders?useSSL=false&useUnicode=true&characterEncoding=UTF-8driver-class-name: com.mysql.jdbc.Driverusername: rootpassword:type: com.alibaba.druid.pool.DruidDataSource # 设置类型为 DruidDataSource# Druid 自定义配置,对应 DruidDataSource 中的 setting 方法的属性min-idle: 0 # 池中维护的最小空闲连接数,默认为 0 个。max-active: 20 # 池中最大连接数,包括闲置和使用中的连接,默认为 8 个。# 用户数据源配置users:url: jdbc:mysql://127.0.0.1:3306/test_users?useSSL=false&useUnicode=true&characterEncoding=UTF-8driver-class-name: com.mysql.jdbc.Driverusername: rootpassword:type: com.alibaba.druid.pool.DruidDataSource # 设置类型为 DruidDataSource# Druid 自定义配置,对应 DruidDataSource 中的 setting 方法的属性min-idle: 0 # 池中维护的最小空闲连接数,默认为 0 个。max-active: 20 # 池中最大连接数,包括闲置和使用中的连接,默认为 8 个。# Druid 自定已配置druid:# 过滤器配置filter:stat: # 配置 StatFilter ,对应文档 https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilterlog-slow-sql: true # 开启慢查询记录slow-sql-millis: 5000 # 慢 SQL 的标准,单位:毫秒# StatViewServlet 配置stat-view-servlet: # 配置 StatViewServlet ,对应文档 https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatViewServlet%E9%85%8D%E7%BD%AEenabled: true # 是否开启 StatViewServletlogin-username: yudaoyuanma # 账号login-password: javaniubi # 密码
  • 不同于我们在 「3.2 应用配置文件」 中,我们将 Druid 的自定义配置,和 urldriver-class-name 等数据源的通用配置放在同一级,这样后续我们只需要使用 @ConfigurationProperties(prefix = "spring.datasource.orders") 的方式,就能完成 DruidDataSource 的配置属性设置。
  • 在 spring.datasource.druid 配置项下,我们还是配置了 filter.stat 和 stat-view-servlet 配置项,用于 Druid 监控功能。

2.3 数据源配置类

在 cn.iocoder.springboot.lab19.datasourcepool.config 包路径下,我们会创建 DataSourceConfig 配置类。代码如下:

// DataSourceConfig.java@Configuration
public class DataSourceConfig {/*** 创建 orders 数据源*/@Primary@Bean(name = "ordersDataSource")@ConfigurationProperties(prefix = "spring.datasource.orders") // 读取 spring.datasource.orders 配置到 HikariDataSource 对象public DataSource ordersDataSource() {return DruidDataSourceBuilder.create().build();}/*** 创建 users 数据源*/@Bean(name = "usersDataSource")@ConfigurationProperties(prefix = "spring.datasource.users")public DataSource usersDataSource() {return DruidDataSourceBuilder.create().build();}}

2.4 Application

创建 Application.java 类,配置 @SpringBootApplication 注解即可。代码如下:

// Application.java@SpringBootApplication
public class Application implements CommandLineRunner {private Logger logger = LoggerFactory.getLogger(Application.class);@Resource(name = "ordersDataSource")private DataSource ordersDataSource;@Resource(name = "usersDataSource")private DataSource usersDataSource;public static void main(String[] args) {// 启动 Spring Boot 应用SpringApplication.run(Application.class, args);}@Overridepublic void run(String... args) {// orders 数据源logger.info("[run][获得数据源:{}]", ordersDataSource.getClass());// users 数据源logger.info("[run][获得数据源:{}]", usersDataSource.getClass());}}

执行日志如下:

2019-11-12 21:39:24.063  INFO 49670 --- [           main] c.i.s.lab19.datasourcepool.Application   : [run][获得数据源:class com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceWrapper]
2019-11-12 21:39:24.064  INFO 49670 --- [           main] c.i.s.lab19.datasourcepool.Application   : [run][获得数据源:class com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceWrapper]

2.5 监控功能

和 2.4监控功能 一致。

不过呢,我们在监控页面上,可以看到两个 Druid 数据库连接池。

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

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

相关文章

《异常处理与资源管理:构建稳定程序的关键纽带》

#1024程序员节&#xff5c;征文# 在软件开发的广袤领域中&#xff0c;异常处理和资源管理如同两座坚实的基石&#xff0c;共同支撑着程序的稳定运行。它们之间的关系紧密而微妙&#xff0c;对于构建可靠、高效的软件系统起着至关重要的作用。让我们深入探讨异常处理和资源管理…

idea项目搭建的四种方式: 一(以idea2017为例)

目录 1. 普通java项目 2. 普通JavaWEB项目 3. maven的JavaWEB项目 4. maven的java项目 1. 普通java项目 ①点击“Create New Project”&#xff1b; ②选择“Java”&#xff0c;选择自己安装的jdk&#xff0c;点击“Next”&#xff1b; ③填好项目名称和路径&#xff1b;…

【LeetCode】动态规划—2466. 统计构造好字符串的方案数(附完整Python/C++代码)

动态规划—2466. 统计构造好字符串的方案数 题目描述前言基本思路1. 问题定义举例&#xff1a; 2. 理解问题和递推关系动态规划思想&#xff1a;状态定义&#xff1a;状态转移方程&#xff1a;边界条件&#xff1a; 3. 解决方法动态规划方法伪代码&#xff1a; 4. 进一步优化5.…

MATLAB图像检索系统

MATLAB图像检索系统应用背景 基于内容的图像检索&#xff08;CBIR&#xff09;是一个非常热门的研究领域。本文在对颜色特征、形状特征和纹理特征的研究基础上&#xff0c;将三种特征结合在一起&#xff0c;实现了可以自定义权重的综合特征的图像检索系统&#xff0c;并在 平…

推动AI技术研发与应用,景联文科技提供专业高效图像采集服务

景联文科技提供专业图像采集服务&#xff0c;涵盖多个领域的应用需求。 包含人体图像、人脸图像、手指指纹、手势识别、交通道路、车辆监控等图像数据集&#xff0c;计算机视觉图像数据集超400TB&#xff0c;支持免费试采试标。 高质量人像采集服务&#xff1a;支持不同光线条件…

网络知识总结

osi七层模型 osi七层模型分为&#xff1a;应用层&#xff0c;表示层&#xff0c;会话层&#xff0c;传输层&#xff0c;网络层&#xff0c;数据链路层&#xff0c;物理层 应用层&#xff1a;客户端与服务端之间建立一个通话界面表示层&#xff1a;对数据进行语言转换&#xf…

【Unity】Unity Shader学习笔记(八)基础纹理2:高度纹理、法线纹理、模型空间下的法线纹理、切线空间下的法线纹理光照计算

文章目录 凹凸映射法线纹理设置高度纹理&#xff08;Height Map&#xff09;法线纹理&#xff08;Normal Map&#xff09;模型空间的法线纹理切线空间的法线纹理优劣对比 切线空间下的法线纹理光照计算最终效果完整代码TANGENT语义内置宏 TANGENT_SPACE_ROTATIONObjSpaceLightD…

028.魔改浏览器-抓取closed的shadowRoot下的内容

一、什么是Shadow DOM Shadow DOM是一种在web开发中用于封装HTML标记、样式和行为的技术&#xff0c;以避免组件间的样式和脚本冲突。它允许开发者将网页的一部分隐藏在一个独立的作用域内&#xff0c;从而实现更加模块化和可维护的代码结构 二、js操作Shadow DOM // 获取宿…

【火山引擎】AIGC图像风格化 | 风格实践 | PYTHON

目录 1 准备工作 2 实践 代码 效果图 1 准备工作 ① 服务开通 确保已开通需要访问的服务。您可前往火山引擎控制台,在左侧菜单中选择或在顶部搜索栏中搜索需要使用的服务,进入服务控制台内完成开通流程。

云手机:社交平台运营的热门工具

随着互联网的飞速发展&#xff0c;社交平台已经成为企业推广和营销的核心渠道。传统的运营方式已经无法满足高效运营的需求&#xff0c;而云手机作为新兴工具&#xff0c;逐渐成为社交平台运营的前沿趋势。本文将深入分析云手机如何优化社交平台的运营流程&#xff0c;助力企业…

足浴店+闸机+智能衣柜+门票系统一体化管理系统解决方案——未来之窗行业应用跨平台架构

一、足浴店收银台 二、智能柜子 三、智能闸机 在收银台开台后&#xff0c;直接通过手环开闸机 1. 提高效率&#xff1a;减少了顾客等待人工操作闸机的时间&#xff0c;能够快速进入店内&#xff0c;提升顾客的进店体验。 2. 便捷服务&#xff1a;无需繁琐的钥匙或卡片&#xf…

新电脑Win11家庭中文版跳过联网激活方法(教程)

预装Win11家庭中文版的新电脑&#xff0c;如何跳过联网激活&#xff1b;由于微软限制必须要联网激活&#xff0c;需要使用已有的微软账户登入或者注册新的微软账户后才可以继续开机使用&#xff0c;Win11联网后系统会自动激活。下面介绍一下初次开机初始化电脑时如何跳过联网激…

LLM:reward-model-deberta-v3-large-v2模型结构

https://hf-mirror.com/OpenAssistant/reward-model-deberta-v3-large-v2是在做合成数据的质量打分时的奖励模型。 模型依托deberta-v3-large-v2编码模型&#xff0c;给定一个qa对&#xff0c;能够给出一个分数来衡量qa对的质量。没有公开训练细节&#xff0c;由于模型的输出层…

llama.cpp 去掉打印,只显示推理结果

llama.cpp 去掉打印&#xff0c;只显示推理结果 1 llama.cpp/common/log.h #define LOG_INF(...) LOG_TMPL(GGML_LOG_LEVEL_INFO, 0, __VA_ARGS__) #define LOG_WRN(...) LOG_TMPL(GGML_LOG_LEVEL_WARN, 0, __VA_ARGS__) #define LOG_ERR(…

基于微信小程序的电影交流平台

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

毕业设计选题:基于Hadoop的热点新闻分析系统的设计与实现

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 新闻类型管理 主题标签管理 热点新闻管理 新闻…

回归预测|时序预测|基于灰狼优化时域卷积TCN结合Transformer的多特征输入单输出的回归预测和多维时序预测Matlab程序

回归预测|时序预测|基于灰狼优化时域卷积TCN结合Transformer的多特征输入单输出的回归预测和多维时序预测Matlab程序 文章目录 一、基本原理一、基本概念二、原理和流程三、优势与应用四、总结 二、实验结果三、核心代码四、代码获取五、总结 回归预测|时序预测|基于灰狼优化时…

深度学习--CNN实现猫狗识别二分类(附带下载链接, 长期有效)

1. 代码实现(包含流程解释) 样本量: 8005 # # 1.导入数据集(加载图片)数据预处理# 进行图像增强, 通过对图像的旋转 ,缩放,剪切变换, 翻转, 平移等一系列操作来生成新样本, 进而增加样本容量, # 同时对图片数值进行归一化[0:1] from tensorflow.keras.preprocessing.image …

ADC在STM32F1系列的使用详解

目录 1. ADC简介 2. 逐次逼近型ADC&#xff08;ADC0809&#xff09; 3. ADC框图&#xff08;STM32&#xff09; 4. ADC基本结构 5. 输入通道 6. 转换模式 6.1 单次转换 6.1.1 非扫描模式 6.1.2 扫描模式 6.2 连续转换 6.2.1 非扫描模式 6.2.2 扫描模式…

计算机网络—静态路由

1.0 网络拓扑结构 星型拓扑结构是一个中心&#xff0c;多个分节点。它结构简单&#xff0c;连接方便&#xff0c;管理和维护都相对容易&#xff0c;而且扩展性强。网络延迟时间较小&#xff0c;传输误差低。中心无故障&#xff0c;一般网络没问题。中心故障&#xff0c;网络就出…