当前位置: 首页 > news >正文

Alibaba Druid整合

文章目录

  • 方式一:自定义整合
  • 方式二:使用 Druid 官方的 Starter

  • Druid官网:https://github.com/alibaba/druid
  • Druid官网文档(中文):https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

方式一:自定义整合

引入 Druid 的依赖:

<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version>
</dependency>

配置数据源、监控页面的 Servlet、Filter

package cn.daniel.springboot2adminstudy.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;
import java.sql.SQLException;/*** 描述:  Spring Boot 手动整合 Druid 连接池*/
// @Deprecated
@Configuration
public class MyDataSourceConfig {/*** 配置 Druid 数据源。(Spring Boot 会在 IoC 容器自动读取类型为 DataSource 的对象。故这个 bean 注入后,即与Spring Boot整合好了)* @return DruidDataSource 数据源* @throws SQLException*/@Bean@ConfigurationProperties(prefix = "spring.datasource",ignoreUnknownFields = false) // 读取配置文件中的数据源信息。Druid会以此建立数据库连接public DataSource dataSource() throws SQLException {DruidDataSource druidDataSource = new DruidDataSource();druidDataSource.setFilters("stat"); // 开启return druidDataSource;}/*** (非必要)开启前台监控页面对应的 Servlet,并设置密码(通过 http://域名/druid/index.html 即可访问监控页面)* 此 Servlet 是由 Druid 提供的 StatViewServlet* @return*/@Beanpublic ServletRegistrationBean<StatViewServlet> druidServlet(){ServletRegistrationBean<StatViewServlet> statViewServletServletRegistrationBean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");statViewServletServletRegistrationBean.addInitParameter("loginUsername","root");statViewServletServletRegistrationBean.addInitParameter("loginPassword","131121");return statViewServletServletRegistrationBean;}/*** (非必要)配置Druid的Filter,用于记录 web 请求记录。* 此 Filter 是由 Druid 提供的 WebStatFilter* @return*/@Beanpublic FilterRegistrationBean<WebStatFilter> druidFilter(){WebStatFilter webStatFilter = new WebStatFilter();FilterRegistrationBean<WebStatFilter> webStatFilterFilterRegistrationBean = new FilterRegistrationBean<>(webStatFilter);// 除以下路径的访问不记录,其它都会进行记录webStatFilterFilterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");// 记录 session 时,记录下 session 中记录的用户名webStatFilterFilterRegistrationBean.addInitParameter("principalSessionName","userName");return webStatFilterFilterRegistrationBean;}}
server:port: 80
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost/abcusername: rootpassword: 12345678

整合完成,现在直接使用 Spring IoC 容器中的 DataSource 对象或 JdbcTemplate 即可。

方式二:使用 Druid 官方的 Starter

引入 Druid 官方提供的 Starter(引入此 Starter 就不需要引用 Druid 依赖包了,因为已经包含 Druid 的依赖包了):

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

配置数据源(或其它的非必要的插件)

server:port: 80
spring:datasource:# JDBC配置:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost/abcusername: rootpassword: 12345678# 连接池配置:druid:initial-size: 2 # 初始化时建立物理连接的个数。默认0max-active: 10 # 最大连接池数量,默认8min-idle: 1 # 最小连接池数量max-wait: 2000 # 获取连接时最大等待时间,单位毫秒。pool-prepared-statements: false # 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。max-pool-prepared-statement-per-connection-size: -1 # 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100# ……druid节点下的其它参数见官方文档:https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE%E5%B1%9E%E6%80%A7%E5%88%97%E8%A1%A8# 启用Druid内置的Filter,会使用默认的配置。可自定义配置,见下方的各个filter节点。filters: stat,wall# StatViewServlet监控器。开启后,访问http://域名/druid/index.htmlstat-view-servlet:enabled: true # 开启 StatViewServlet,即开启监控功能login-username: daniel # 访问监控页面时登录的账号login-password: 1234 # 密码url-pattern: /druid/* # Servlet的映射地址,不填写默认为"/druid/*"。如填写其它地址,访问监控页面时,要使用相应的地址reset-enable: false # 是否允许重置数据(在页面的重置按钮)。(停用后,依然会有重置按钮,但重置后不会真的重置数据)allow: 192.168.1.2,192.168.1.1 # 监控页面访问白名单。默认为127.0.0.1。与黑名单一样,支持子网掩码,如128.242.127.1/24。多个ip用英文逗号分隔deny: 18.2.1.3 # 监控页面访问黑名单# 配置 WebStatFilter(StatFilter监控器中的Web模板)web-stat-filter:enabled: true # 开启 WebStatFilter,即开启监控功能中的 Web 监控功能url-pattern: /* # 映射地址,即统计指定地址的web请求exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*' # 不统计的web请求,如下是不统计静态资源及druid监控页面本身的请求session-stat-enable: true # 是否启用session统计session-stat-max-count: 1 # session统计的最大个数,默认是1000。当统计超过这个数,只统计最新的principal-session-name: userName # 所存用户信息的serssion参数名。Druid会依照此参数名读取相应session对应的用户名记录下来(在监控页面可看到)。如果指定参数不是基础数据类型,将会自动调用相应参数对象的toString方法来取值principal-cookie-name: userName # 与上类似,但这是通过Cookie名取到用户信息profile-enable: true # 监控单个url调用的sql列表(试了没生效,以后需要用再研究)filter:wall:enabled: true  # 开启SQL防火墙功能config:select-allow: true # 允许执行Select查询操作delete-allow: false # 不允许执行delete操作create-table-allow: false # 不允许创建表# 更多用法,参考官方文档:https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE-wallfilter

检查整合情况
可通过以下测试方法,查看当前数据源

package cn.daniel.springboot2adminstudy;//import com.alibaba.druid.pool.DruidDataSource;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;import javax.sql.DataSource;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;@SpringBootTest
@Slf4j
class Springboot2AdminStudyApplicationTests {@AutowiredJdbcTemplate jdbcTemplate;@AutowiredDataSource dataSource;@Testvoid contextLoads() {// 执行一条sql语句,检查是否正常List<Map<String, Object>> maps = jdbcTemplate.queryForList("select * from adm_employee");for (Map<String, Object> map : maps) {System.out.println(map);}// 查看当前数据源,如果是Druid连接池,会出现下面两种提示的其中一种:// 1. 当使用Starter整合的:当前数据源:com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceWrapper// 2. 当使用自定义整合时:当前数据源:com.alibaba.druid.pool.DruidDataSourcelog.info("当前数据源:{}",dataSource.getClass().getName());}}

参考:
https://blog.csdn.net/weixin_45448561/article/details/123624927

相关文章:

Alibaba Druid整合

文章目录 方式一&#xff1a;自定义整合方式二&#xff1a;使用 Druid 官方的 Starter Druid官网&#xff1a;https://github.com/alibaba/druidDruid官网文档&#xff08;中文&#xff09;&#xff1a;https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%…...

SpringCloud 微服务全栈体系(三)

第五章 Nacos 注册中心 国内公司一般都推崇阿里巴巴的技术&#xff0c;比如注册中心&#xff0c;SpringCloudAlibaba 也推出了一个名为 Nacos 的注册中心。 一、认识和安装 Nacos 1. 认识 Nacos Nacos是阿里巴巴的产品&#xff0c;现在是SpringCloud中的一个组件。相比Eure…...

VScode连接的服务器上使用jupyter显示请选择内核源

问题复现 我实在VScode上用ssh-remote连接的服务器&#xff0c;想用.ipynb文件上写东西&#xff0c;结果窗口上方弹出一个输入框&#xff0c;“请键入以选择内核”&#xff1b; 在扩展里找到jupyter更新一下 之前左边的图标是灰色的&#xff0c;后来我下下载了新的版本&#…...

新能源汽车展厅用哪些种类的显示屏比较好?

现在有越来越多的新能源汽车展厅开到了商场、购物中心当中。在新能源汽车展厅中&#xff0c;显示屏已经成为不可或缺的设备设施&#xff0c;可以用来展现产品介绍、优惠信息、文化宣传等。那么新能源汽车展厅的显示大屏用什么屏比较好呢&#xff1f; LED大屏幕&#xff1a;LED显…...

proxmox pve /dev/mapper/pve-root扩容

vgs3 pvs4 vgs5 lvs6 lvremove /dev/pve/data8 lvresize -l 100%FREE /dev/pve/root9 resize2fs /dev/mapper/pve-root 10 history...

【ECS游戏架构】逻辑帧驱动带来的性能和即时性问题分析

1024水一篇~ 个人拙见&#xff0c;如有错误希望大佬拔刀纠正。 根据守望先锋在GDC会议上对ECS架构的描述&#xff0c;所有的系统(system)都是由逻辑帧驱动的&#xff1a;每帧遍历所有的system&#xff0c;并调用system的update()更新游戏世界的状态。 在实际应用中这可能会存…...

数据库监控:关键指标和注意事项

【squids.cn】 全网zui低价RDS&#xff0c;免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 听到模糊的说法“我们的数据库有问题”对于任何数据库管理员或管理员来说都是一场噩梦。有时是真的&#xff0c;有时不是&#xff0c;到底问题出在哪里呢&#xff1f;真…...

高防回源ip被源站拦截怎么办

​  在进行网站运营过程中&#xff0c;我们经常会遇到DDoS攻击等网络安全威胁。为了保护网站的正常运行&#xff0c;很多企业选择使用高防服务来应对这些攻击。有时候我们可能会遇到一个问题&#xff0c;就是高防回源IP被源站拦截的情况。 那么&#xff0c;当我们发现高防回源…...

关于集群和分布式部署

EJB的RPC是同步调用可实现分布式计算&#xff0c;是SessionBean和EntityBean用的&#xff0c;而JMS是异步调用。RMI&#xff0c;和webservice也可以实现分布式计算。 举例说明&#xff0c;假设我们的系统有三个EJB组件&#xff1a;人事、财务、销售&#xff0c;都是开放远程接口…...

XIlinx提供的DDR3 IP与 UG586

DDR系统需要关注的三样东西&#xff1a;控制器、PHY、SDRAM颗粒&#xff0c;但这是实现一个DDR3 IP所需要的&#xff0c;如果只希望调用IP的话&#xff0c;则只需要调用IP即可&#xff0c;目前时间紧急&#xff0c;我先学一学如何使用IP&#xff0c;解决卡脖子的问题&#xff0…...

C++数据结构X篇_19_排序基本概念及冒泡排序(重点是核心代码)

文章目录 1. 排序基本概念2. 冒泡排序2.1 核心代码2.2 冒泡排序代码2.3 查看冒泡排序的时间消耗2.4 冒泡排序改进版减小时间消耗 1. 排序基本概念 现实生活中排序很重要&#xff0c;例如:淘宝按条件搜索的结果展示等。 概念 排序是计算机内经常进行的一种操作&#xff0c;其目…...

LeetCode LCR 179. 查找总价格为目标值的两个商品

和为 s 的两个数字 题目链接 LCR 179. 查找总价格为目标值的两个商品 购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品的价格总和刚好是 target。若存在多种情况&#xff0c;返回任一结果即可。 示例 1&#xff1a; 输入&#xff1a;price [3, 9, 12, …...

上架用的SDK三方应用隐私

SDK名称&#xff1a;华为推送 使用目的&#xff1a;用于向华为手机用户推送消息 使用场景&#xff1a;用户账号相关促销活动、消息提醒更新时 信息收集类型&#xff1a;设备相关信息&#xff08;Android_ID&#xff09;使用的敏感权限&#xff1a;不涉及 使用的敏感权限&am…...

从REST到GraphQL:升级你的Apollo体验

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…...

Jupyter使用技巧-环境篇

不同于其他IDE&#xff0c;有时会出现找不到文件路径&#xff0c;通常是因为当前工作目录&#xff08;working directory&#xff09;不同所导致的。Jupyter Notebook 会在启动时选择一个初始的工作目录&#xff0c;而这个目录可能与你运行 .py 文件时所在的目录不同。 import…...

软件项目管理【UML-组件图】

目录 一、组件图概念 二、组件图包含的元素 1.组件&#xff08;Component&#xff09;->构件 2.接口&#xff08;Interface&#xff09; 3.外部接口——端口 4.连接器&#xff08;Connector&#xff09;——连接件 4.关系 5.组件图表示方法 三、例子 一、组件图概念…...

npm版本错误——npm ERR! code ERESOLVE 解决方法

起因 项目中echart版本过低&#xff0c;导致某些图表不能正确显示&#xff0c;所以大手一挥&#xff0c;将echart版本从4升级到了5&#xff0c; 再去运行项目的时候 就发现项目报错了 npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! …...

基于卷积神经网络的乳腺癌分类 深度学习 医学图像 计算机竞赛

文章目录 1 前言2 前言3 数据集3.1 良性样本3.2 病变样本 4 开发环境5 代码实现5.1 实现流程5.2 部分代码实现5.2.1 导入库5.2.2 图像加载5.2.3 标记5.2.4 分组5.2.5 构建模型训练 6 分析指标6.1 精度&#xff0c;召回率和F1度量6.2 混淆矩阵 7 结果和结论8 最后 1 前言 &…...

模式识别——高斯分类器

模式识别——高斯分类器 需知定义特殊情况&#xff08;方差一致&#xff09;Sigmoid 需知 所有问题定义在分类问题下&#xff0c;基于贝叶斯决策 定义 条件概率为多元高斯分布&#xff0c;此时观测为向量 X X 1 , X 2 , . . . , X n X{X_1,X_2,...,X_n} XX1​,X2​,...,Xn​…...

LeetCode 15. 三数之和

三数之和 题目链接 15. 三数之和 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 **注意&#xff1a;**答案…...

Kotaemon功能测评:这个开源RAG UI到底有多好用?

Kotaemon功能测评&#xff1a;这个开源RAG UI到底有多好用&#xff1f; 想象一下&#xff0c;你手头有一堆产品文档、技术手册或者内部资料&#xff0c;每次想从中快速找到某个问题的答案&#xff0c;都得像大海捞针一样翻来翻去。或者&#xff0c;你费劲搭建了一个RAG&#x…...

Youtu-Parsing开源文档解析模型详解:像素级定位+RAG就绪JSON/Markdown输出

Youtu-Parsing开源文档解析模型详解&#xff1a;像素级定位RAG就绪JSON/Markdown输出 你是不是经常遇到这样的烦恼&#xff1f;拿到一份扫描的PDF合同&#xff0c;想把里面的表格数据提取出来&#xff0c;结果复制粘贴后格式全乱了&#xff1b;或者收到一张带公式的学术论文截…...

OpenClaw学术研究流:Phi-3-mini-128k-instruct自动生成论文综述

OpenClaw学术研究流&#xff1a;Phi-3-mini-128k-instruct自动生成论文综述 1. 为什么需要自动化文献综述 每次开始新的研究课题时&#xff0c;最让我头疼的就是文献综述环节。作为独立研究者&#xff0c;我常常需要花费数周时间阅读上百篇论文&#xff0c;手动整理关键观点和…...

智能相册管理:OpenClaw+Phi-3-vision-128k-instruct自动分类家庭照片

智能相册管理&#xff1a;OpenClawPhi-3-vision-128k-instruct自动分类家庭照片 1. 为什么需要智能相册管理&#xff1f; 每次打开手机相册&#xff0c;看到上万张杂乱无章的照片时&#xff0c;我都感到一阵头疼。孩子的成长瞬间、家庭旅行、朋友聚会全都混在一起&#xff0c…...

Beyond All Reason代码架构分析:理解Spring引擎上的游戏开发模式

Beyond All Reason代码架构分析&#xff1a;理解Spring引擎上的游戏开发模式 【免费下载链接】Beyond-All-Reason Main game repository for Beyond All Reason. 项目地址: https://gitcode.com/gh_mirrors/be/Beyond-All-Reason Beyond All Reason&#xff08;简称BAR&…...

进程通信与网络协议

一、进程间通信1、管道&#xff1a;管道是基于文件描述符的半双工的通信方式&#xff0c;数据单向流动&#xff0c;数据读取后会从管道中删除。A. 无名管道 ​ i. 仅存在于内核空间中&#xff0c;无文件系统入口 ​ i. 仅支持亲缘间进程通信 ​ i. 进程退出后管道会自动释放 ​…...

LangChain教程-、Langchain基础来

简介 AI Agent 不仅仅是一个能聊天的机器人&#xff08;如普通的 ChatGPT&#xff09;&#xff0c;而是一个能够感知环境、进行推理、自主决策并调用工具来完成特定任务的智能系统&#xff0c;更够完成更为复杂的AI场景需求。 AI Agent 功能 根据查阅的资料&#xff0c;agent的…...

龙芯k - 走马观碑组MPU驱动移植孟

先回顾&#xff1a;三次握手&#xff08;建立连接&#xff09;核心流程&#xff08;实际版&#xff09; 为了让挥手流程衔接更顺畅&#xff0c;咱们先快速回顾三次握手的实际核心&#xff0c;避免上下文脱节&#xff1a; 第一步&#xff08;客户端→服务器&#xff09;&#xf…...

AI编程实战:从零到一搭建全栈项目胺

1. 核心概念 在 Antigravity 中&#xff0c;技能系统分为两层&#xff1a; Skills (全局库)&#xff1a;实际的代码、脚本和指南&#xff0c;存储在系统级目录&#xff08;如 ~/.gemini/antigravity/skills&#xff09;。它们是“能力”的本体。 Workflows (项目级)&#xff1a…...

2026年AI热点:阿里新模型领跑行业

今日AI热点汇总&#xff08;2026年4月9日&#xff09; 一、阿里发布新模型&#xff0c;性能大幅提升 今天&#xff0c;阿里巴巴重磅推出了全新的通义千问模型&#xff0c;这个新模型在语言理解、逻辑推理和代码生成等方面都有了显著提升。 更强的理解能力&#xff1a;能更准确地…...