【微服务~原始真解】Spring Cloud —— 访问数据库整合Druid数据源

🔎这里是【秒懂·云原生】,关注我学习云原生不迷路
👍如果对你有帮助,给博主一个免费的点赞以示鼓励
欢迎各位🔎点赞👍评论收藏⭐️
👀专栏介绍
【秒懂·云原生】 目前主要更新微服务,一起学习一起进步。
👀本期介绍
主要介绍Spring Cloud —— 访问数据库整合Druid数据源
文章目录
- 👀专栏介绍
- 👀本期介绍
- Spring Boot JDBC访问数据库
- 引入JDBC启动器
- 数据库驱动
- 配置数据源
- 测试
- Spring Boot整合Druid数据源
- 引入 Druid Spring Boot Starter 依赖
- 配置属性
- 配置类
- 结束语🏆🏆🏆
Spring Boot JDBC访问数据库
对于数据访问层,无论是 SQL(关系型数据库) 还是 NOSQL(非关系型数据库),Spring Boot 都默认采用整合 Spring Data 的方式进行统一处理,通过大量自动配置,来简化我们对数据访问层的操作,我们只需要进行简单的设置即可实现对书层的访问。
引入JDBC启动器
<!--导入JDBC的启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
数据库驱动
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
配置数据源
这里填自己数据库的信息
#数据源连接信息
spring: datasource: username: root password: root url: jdbc:mysql://localhost:3306/dbdriver-class-name: com.mysql.cj.jdbc.Driver
测试
Spring Boot 提供了一个名为 JdbcTemplate 的轻量级数据访问工具,它是对 JDBC 的封装。Spring Boot 对 JdbcTemplate 提供了默认自动配置,我们可以直接使用 @Autowired 或构造函数将它注入到 bean 中使用。
Spring Boot整合Druid数据源
Druid 是阿里巴巴推出的一款开源的高性能数据源产品,Druid 支持所有JDBC 兼容的数据库,包括 Oracle、MySQL、SQL Server 和 H2 等等。Druid 不仅结合了 C3P0、DBCP 和 PROXOOL 等数据源产品的优点,同时还加入了强大的监控功能。通过 Druid 的监控功能,可以实时观察数据库连接池和 SQL 的运行情况,帮助用户及时排查出系统中存在的问题。使用 Druid Spring Boot Starter 将 Druid 与 Spring Boot 整合
引入 Druid Spring Boot Starter 依赖
<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId> <version>1.2.9</version> </dependency>
配置属性
#数据库连接信息配置
spring: datasource: driver-class-name: com.mysql.jdbc.Driver username: root password: root url: jdbc:mysql://localhost:3306/db pools: initial-size: 10 # 初始化时建立物理连接的个数。初始化发生 在显示调用init方法,或者第一次getConnection时 min-idle: 10 # 最小连接池数量 最小空闲数量 maxActive: 200 # 最大连接池数量 最大活跃连接数 maxWait: 60000 # 获取连接时最大等待时间,单位毫秒。配置了 maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置 timeBetweenEvictionRunsMillis: 60000 # 检查空闲连接的 频率.Destroy线程会检测连接的间隔时间,如果连接空闲时间大于等于 minEvictableIdleTimeMillis则关闭物理连接。 minEvictableIdleTimeMillis: 300000 # 连接的最小生存时 间.连接保持空闲而不被驱逐的最小时间 validationQuery: SELECT 1 # 验证数据库服务可用性的 sql.用来检测连接是否有效的sql 因数据库方言而差, 例如 oracle 应该写 成 SELECT 1 FROM DUAL testWhileIdle: true # 申请连接时检测空闲时间,根据空闲时 间再检测连接是否有效.建议配置为true,不影响性能,并且保证安全性。申请 连接的时候检测,如果空闲时间大于timeBetweenEvictionRun testOnBorrow: false # 申请连接时直接检测连接是否有效.申 请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性 能。testOnReturn: false # 归还连接时检测连接是否有效.归还连 接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 poolPreparedStatements: true # 开启PSCache maxPoolPreparedStatementPerConnectionSize: 20 #设置 PSCache值connectionErrorRetryAttempts: 3 # 连接出错后再尝试连接 三次 breakAfterAcquireFailure: true # 数据库服务宕机自动重 连机制 timeBetweenConnectErrorMillis: 300000 # 连接出错后重 试时间间隔asyncInit: true # 异步初始化策略 remove-abandoned: true # 是否自动回收超时连接 remove-abandoned-timeout: 1800 # 超时时间(以秒数为单 位) 超过此值后,druid将强制回收该连接 transaction-query-timeout: 6000 # 事务超时时间 filters: stat,wall,log4j2 connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 stat-view-servlet: enabled: true #是否开启内置监控页面,默认值 为 false url-pattern: "/druid/*" #StatViewServlet 的映射 路径,即内置监控页面的访问地址 allow: 127.0.0.1 #白名单 deny: #黑名单 reset-enable: false #是否启用重置按钮 login-username: admin #内置监控页面的登录页用户名 usernamelogin-password: admin #内置监控页面的登录页密码 passwordweb-stat-filter: enabled: true #是否开启内置监控中的 Web- jdbc 关联监控的数据 url-pattern: "/*" #匹配路径 exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*" #排除 路径 session-stat-enable: true #是否监控session
配置类
DruidDataSourceConfig.java
package com.example.demo;import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
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;
import java.sql.SQLException;/*** @author yeqv* @program demo* @Classname DruidDataConfig* @Date 2022/4/29 16:35* @Email w16638771062@163.com*/
@Configuration
@ConfigurationProperties(prefix = "spring.datasource")
@Data
public class DruidDataSourceConfig {@AutowiredDruidStatProperties druidStatProperties;@AutowiredStatFilter statFilter;private String url;private String username;private String password;private String driverClasName;@Beanpublic DataSource dataSource(DruidPools druidPools) throws SQLException {DruidDataSource dataSource = new DruidDataSource();dataSource.setUrl(getUrl());dataSource.setUsername(getUsername());dataSource.setPassword(getPassword());dataSource.setDriverClassName(getDriverClasName());dataSource.setInitialSize(druidPools.getInitialSize());dataSource.setMinIdle(druidPools.getMinIdle());dataSource.setMaxActive(druidPools.getMaxActive());dataSource.setMaxWait(druidPools.getMaxWait());dataSource.setTimeBetweenEvictionRunsMillis(druidPools.getTimeBetweenEvictionRunsMillis());dataSource.setMinEvictableIdleTimeMillis(druidPools.getMinEvictableIdleTimeMillis());dataSource.setValidationQuery(druidPools.getValidationQuery());dataSource.setTestWhileIdle(druidPools.testWhileIdle);dataSource.setTestOnBorrow(druidPools.testOnBorrow);dataSource.setTestOnReturn(druidPools.testOnReturn);dataSource.setPoolPreparedStatements(druidPools.poolPreparedStatements);dataSource.setMaxPoolPreparedStatementPerConnectionSize(druidPools.maxPoolPreparedStatementPerConnectionSize);dataSource.setConnectionErrorRetryAttempts(druidPools.connectionErrorRetryAttempts);dataSource.setBreakAfterAcquireFailure(druidPools.breakAfterAcquireFailure);dataSource.setTimeBetweenConnectErrorMillis(druidPools.timeBetweenConnectErrorMillis);dataSource.setAsyncInit(druidPools.asyncInit);dataSource.setRemoveAbandoned(druidPools.removeAbandoned);dataSource.setRemoveAbandoned(druidPools.removeAbandoned);dataSource.setTransactionQueryTimeout(druidPools.transactionQueryTimeout);dataSource.setFilters(druidPools.filters);dataSource.setConnectProperties(druidPools.connectionProperties);return dataSource;}@Beanpublic ServletRegistrationBean druidServlet(StatConfig statConfig) {ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(); // 现在要进行druid监控的配置处理操作servletRegistrationBean.setServlet(new StatViewServlet());servletRegistrationBean.addUrlMappings(druidStatProperties.getStatViewServlet().getUrlPattern());servletRegistrationBean.addInitParameter("allow", statConfig.getAllow()); // 白名单servletRegistrationBean.addInitParameter("deny", statConfig.getDeny()); // 黑名单servletRegistrationBean.addInitParameter("loginUsername", statConfig.getLoginUsername()); // 用户名servletRegistrationBean.addInitParameter("loginPassword", statConfig.getLoginPassword()); // 密码servletRegistrationBean.addInitParameter("resetEnable", statConfig.getResetEnable()); // 是否可以重置数据源return servletRegistrationBean;}@Beanpublic FilterRegistrationBean filterRegistrationBean(StatFilter statFilter) {FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();filterRegistrationBean.setFilter(new WebStatFilter());filterRegistrationBean.addUrlPatterns(statFilter.urlPattern); // 所有请求进行监控处理filterRegistrationBean.addInitParameter("exclusions", statFilter.exclusions);filterRegistrationBean.setEnabled(statFilter.enabled);return filterRegistrationBean;}
}
StatFilter.java
package com.example.demo;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;/*** @author yeqv* @program demo* @Classname StatFilter* @Date 2022/4/29 16:51* @Email w16638771062@163.com*/
@Configuration
@ConfigurationProperties(prefix = "spring.datasource.web-stat-filter")
@Data
public class StatFilter {boolean enabled;String urlPattern;String exclusions;
}
StatConfig.java
package com.example.demo;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;/*** @author yeqv* @program demo* @Classname StatConfig* @Date 2022/4/29 16:48* @Email w16638771062@163.com*/
@Configuration
@ConfigurationProperties(prefix = "spring.datasource.stat-view-servlet")
@Data
public class StatConfig {String urlPattern;String allow;String deny;String resetEnable;String loginUsername;String loginPassword;}
DruidPools.java
package com.example.demo;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;import java.util.Properties;/*** @author yeqv* @program demo* @Classname DruidPools* @Date 2022/4/29 16:45* @Email w16638771062@163.com*/
@Configuration
@ConfigurationProperties(prefix = "spring.datasource.pools")
@Data
public class DruidPools {int initialSize;int minIdle;int maxActive;int maxWait;long timeBetweenEvictionRunsMillis;long minEvictableIdleTimeMillis;String validationQuery;boolean testWhileIdle;boolean testOnBorrow;boolean testOnReturn;boolean poolPreparedStatements;int maxPoolPreparedStatementPerConnectionSize;int connectionErrorRetryAttempts;boolean breakAfterAcquireFailure;long timeBetweenConnectErrorMillis;boolean asyncInit;boolean removeAbandoned;long removeAbandonedTimeout;int transactionQueryTimeout;String filters;Properties connectionProperties;}

结束语🏆🏆🏆
🔥推荐一款模拟面试、刷题神器网站
点击注册即可
牛客刷题网
1、算法篇(398题):面试必刷100题、算法入门、面试高频榜单
2、SQL篇(82题):快速入门、SQL必知必会、SQL进阶挑战、面试真题
3、大厂笔试真题:字节跳动、美团、百度、腾讯…

相关文章:
【微服务~原始真解】Spring Cloud —— 访问数据库整合Druid数据源
🔎这里是【秒懂云原生】,关注我学习云原生不迷路 👍如果对你有帮助,给博主一个免费的点赞以示鼓励 欢迎各位🔎点赞👍评论收藏⭐️ 👀专栏介绍 【秒懂云原生】 目前主要更新微服务,…...
前端入门必刷题,经典算法—两数之和
优美的前⾔ 年轻的码农哟~ 你是不是⼀直在思考⾃我提升的问题~ 思来想去,决定从算法抓起(单押)~ 拿起⼜放下,经历过多少次放弃(单押 ✖ 2)~ 决定了!这次让我来帮你梳理(单押 ✖ 3&a…...
‘海外/国外‘地区微博签到shu据(正题在第二部分)
最近失眠,研究了项关于weibo爬虫的新功能,种种原因,大家可跳过第一部分的引用直接看第二部分。 内容来源:健康中国、生命时报、央视等 失眠标准一:3个“30分钟” ● 入睡困难,从躺下想睡到睡着间隔…...
Springboot——SB整合Mybatis的CURD(基于注解进行开发)
此处是根据需求实现基本操作 上面这里涉及到了条件分页查询,还有增加和批量删除员工信息,右边编辑就是先查询后更新操作,叫做查询回显,然后在原有基础上进行更新 环境准备 在下面的入门案例的整体环境下把数据库表换成empSpring…...
现在大专生转IT可行吗?
当然可行的。 大专也是人,为什么不可以选择喜欢的专业学习,现在大学生遍地都是,学历已经不是限制你发展的因素了。有的人就是不擅长理论学习,更喜欢技术。IT也只是一个普普通通的技术行业,跟其他技术行业一样…...
XC7A50T-1CSG324I、XC7A50T-2CSG324I Artix-7 FPGA可编程门阵列
Artix-7 FPGA能够在多个方面实现更高的性价比,这些方面包括逻辑、信号处理、嵌入式内存、LVDS I/O、内存接口,以及收发器。MicroBlaze CPU针对Xilinx FPGA进行了优化,是一种可高度配置的32位RISC处理器,可为微控制器、实时处理器和…...
linux安装图片处理软件ImageMagick
下载地址: wget https://download.imagemagick.org/archive/ImageMagick-7.1.1-4.tar.gz 或者 wget --no-check-certificate https://download.imagemagick.org/archive/ImageMagick-7.1.1-4.tar.gz 安装命令: tar -zxvf ImageMagick-7.1.1-4.tar.…...
【Java基础】JavaCore核心-反射技术
文章目录1.什么是反射技术2.反射-获取类对象方式3.反射-获取声明构造器4.反射-对象创建实战5.反射-方法和属性实战6.反射-属性值操作实战7.反射-invoke运行类方法1.什么是反射技术 Java的反射(reflection)机制是指在程序的运行状态中 可以构造任意一个类…...
AWGN后验估计下的均值与协方差关系(向量和标量形式)
文章目录AWGN信道向量模型后验均值与协方差的关系从实数域拓展到复数域小结AWGN信道向量模型 考虑一个随机向量x∼pX(x)\boldsymbol x \sim p_{\boldsymbol X}(\boldsymbol x)x∼pX(x),信道模型为 qxv,v∼N(0,Σ)\boldsymbol q \boldsymbol x \boldsymbol v, \…...
Linux常用命令之文件搜索命令
1、常用搜索-find 命令find英文原意find所在路径/bin/find执行权限所有用户功能描述文件搜索语法find [搜索范围] [搜索条件] (默认准确搜索)范例find /etc -name init?? 常用的搜索条件的选项包括: -name:按照文件名进行匹配查找,例&…...
ChatGPT给软件测试行业带来的可能
软件测试在软件开发过程中扮演着至关重要的角色,因为它可以确保软件的质量和可靠性。而随着人工智能技术的不断发展,ChatGPT作为一个强大的自然语言处理工具,可以在软件测试中发挥出许多重要的作用。本文将介绍ChatGPT在软件测试应用中带来的…...
Cadence Allegro 导出Properties on Nets Report报告详解
⏪《上一篇》 🏡《上级目录》 ⏩《下一篇》 目录 1,概述2,Properties on Nets Report作用3,Properties on Nets Report示例4,Properties on Nets Report导出方法4.1,方法14.2,方法2B站关注“硬小二”浏览更多演示视频...
JAVA代码 实现定位数据动态聚集并绘制多边形区域
文章目录思路1、限制聚合距离2、绘制多边形区域3、多边形区域之间合并4、多边形定边点4、逻辑流程一些性能上的优化1、多边形设置圆心2、采用分支合并思路3、清理聚集较分散区域合理性处理1、解决多边形内凹角问题2、解决定边点插入位置问题3、多边形区域扩展成果展示最近有根据…...
基于储能进行调峰和频率调节研究【超线性增益的联合优化】(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
体验 Linux 的几个监控命令(htop、nmon、netdata)
体验 Linux 的几个监控命令htopnmonnetdatahtop 安装, sudo dnf install -y htop使用, htopnmon 安装, sudo dnf install -y nmon使用, nmon输入c, 输入C, 输入m, 输入n, 输入…...
NOC大赛2022NOC软件创意编程初赛图形化小低组(小学高年级组)
一、选择题 1.如果要控制所有角色一起朝舞台区右侧移动,下面哪个积太块是不需要的 2.要想让三个角色一起移动起来,下面哪个积木块没有作用 ? 3.小猴按照下面的程序前进,小猴最后一次前进了()步。 4.小可同学写了一个画笔程序画出花朵,但是运行后什么都看不到,不可…...
python进行股票收益率计算和风险控制的实现
股票收益率计算和风险控制的实现 在进行股票投资时,计算收益率和进行风险控制是非常重要的。本文将介绍一个与此相关的函数:radio_day_cal()。 radio_day_cal()函数 def radio_day_cal(last_day, sheet_name, df_dict, code_list, new_list):i 0days…...
自从有了这套近4000页的开发文档后,Java面试路上就像开了挂一样
Java是世界最流行的编程语言,也是国内大多数IT公司的主流语言。招聘网站上Java岗位众多,Java工程师似乎不愁找工作。但仔细一看就会发现,Java岗位的招聘薪酬天差地别,人才要求也是五花八门。而在Java工程师求职过程中,…...
Python文件操作
目录 一、文件操作介绍 二、文件的打开和关闭 三、文件的读写 四、文件文件夹相关操作 五、test 一、文件操作介绍 文件 : python中文件是对象 Liunx 文件 : 一切设备都可以看成是文件 磁盘文件 管道 网络Socket 文件属性: 读 写 执行权限 就是把一些存储存放起来&…...
036:cesium加载GPX文件,显示图形
第036个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中加载GPX文件, 显示图形。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共83行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:https:/…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
