SpringBoot 使用自定义的方式整合Druid数据源(powernode document)(内含源代码)

news2024/11/14 21:37:03

SpringBoot 使用自定义的方式整合Druid数据源(powernode document)(内含源代码)

源代码下载链接地址https://download.csdn.net/download/weixin_46411355/87404561

目录

  • SpringBoot 使用自定义的方式整合Druid数据源(powernode document)(内含源代码)
  • `源代码下载链接地址`:[https://download.csdn.net/download/weixin_46411355/87404561](https://download.csdn.net/download/weixin_46411355/87404561)
    • 一、介绍
    • 二、添加durid的依赖
    • 三、修改application.yml配置文件
    • 四、添加MyDruidProperties配置文件类
    • 五、添加MyDruidAutoConfiguration自动配置类
    • 六、测试访问

一、介绍

就是只导入druid的依赖(数据源、servlet),然后自己写自动配置类
在这里插入图片描述

二、添加durid的依赖

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

三、修改application.yml配置文件

application.yml

my:
  druid:
    url: jdbc:mysql://localhost:13306/ssm_power_edu?serverTimezone=GMT%2B8
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
    initial-size: 2
    max-active: 10
    min-idle: 3
    validation-query: select 'x'
    stat-view:
      login-username: admin
      login-password: admin
      allow:
      deny:
      url-mapping:
        - /druid/*
        - /druid2/*

四、添加MyDruidProperties配置文件类

package com.bjpowernode.springboot27datasourcedruidselfconfigurationdocument.config;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;

@Data
@NoArgsConstructor
@AllArgsConstructor
@ConfigurationProperties(prefix = "my.druid")
public class MyDruidProperties {
    private String url;
    private String driverClassName;
    private String username;
    private String password;
    /**
     * 初始化链接数
     */
    private Integer initialSize;
    /**
     * 最大链接活跃数
     */
    private Integer maxActive;
    /**
     * 最小链接数
     */
    private Integer minIdle;
    /**
     * 检查的sql语句
     */
    private String validationQuery;

    private StatView statView;

    /**
     * 监控配置
     */
    @Data
    static class StatView {
        /**
         * 监控登陆用户名
         */
        private String loginUsername;
        /**
         * 监控登陆密码
         */
        private String loginPassword;
        /**
         * 白名单
         */
        private String allow;
        /**
         * 黑名单
         */
        private String deny;
        /**
         * 映射路径
         */
        private String[] urlMapping;
    }

}

五、添加MyDruidAutoConfiguration自动配置类

package com.bjpowernode.springboot27datasourcedruidselfconfigurationdocument.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;

import javax.sql.DataSource;

//@ConditionalOnClass(DataSource.class) // 必须要有这个类才生效
@EnableConfigurationProperties(MyDruidProperties.class) // 指定配置类
@Configuration // 配置类
public class MyDruidAutoConfiguration {
    @Autowired
    private MyDruidProperties myDruidProperties;

    /**
     * 创建数据源
     *
     * @return
     */
    @Bean(initMethod = "init", destroyMethod = "close")
    public DruidDataSource druidDataSource() {
        if (!StringUtils.hasText(myDruidProperties.getUrl())) {
            throw new IllegalArgumentException("URL 不能为空");
        }
        DruidDataSource druidDataSource = new DruidDataSource();
        // 设置参数
        druidDataSource.setUrl(myDruidProperties.getUrl());
        druidDataSource.setUsername(myDruidProperties.getUsername());
        druidDataSource.setPassword(myDruidProperties.getPassword());
        druidDataSource.setDriverClassName(myDruidProperties.getDriverClassName());
        druidDataSource.setMaxActive(myDruidProperties.getMaxActive());
        druidDataSource.setInitialSize(myDruidProperties.getInitialSize());
        druidDataSource.setMinIdle(myDruidProperties.getMinIdle());
        druidDataSource.setValidationQuery(myDruidProperties.getValidationQuery());
        return druidDataSource;
    }


    /**
     * 注册servlet
     *
     * @return
     */
    @Bean
    public ServletRegistrationBean<StatViewServlet> statViewServletServletRegistrationBean() {
        StatViewServlet statViewServlet = new StatViewServlet();
        ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<>();
        registrationBean.setServlet(statViewServlet);
        // 设置参数
        registrationBean.addInitParameter("loginUsername", myDruidProperties.getStatView().getLoginUsername());
        registrationBean.addInitParameter("loginPassword", myDruidProperties.getStatView().getLoginPassword());
        registrationBean.addInitParameter("allow", myDruidProperties.getStatView().getAllow());
        registrationBean.addInitParameter("deny", myDruidProperties.getStatView().getDeny());
        registrationBean.addUrlMappings(myDruidProperties.getStatView().getUrlMapping());
        return registrationBean;
    }
}

六、测试访问

http://localhost:8080/druid或者http://localhost:8080/druid2
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

SQLSERVER 的 nolock 到底是怎样的无锁?

一&#xff1a;背景 1. 讲故事 相信绝大部分用 SQLSERVER 作为底层存储的程序员都知道 nolock 关键词&#xff0c;即使当时不知道也会在踩过若干阻塞坑之后果断的加上 nolock&#xff0c;但这玩意有什么注意事项呢&#xff1f;这就需要了解它的底层原理了。 二&#xff1a;n…

python之np.sum()用法详解

python库numpy提供的求和方法np.sum()&#xff0c;可以对数组和矩阵进行求和。sum方法可以接收多个参数&#xff0c;主要是数组a,坐标轴axis,数据类型dtype,初始值initial。其中&#xff0c;axis对于我们来说比较容易迷糊&#xff0c;这个值对求和有什么影响&#xff1f;一般来…

Linux常用命令——rcp命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) rcp 使在两台Linux主机之间的文件复制操作更简单 补充说明 rcp命令使在两台Linux主机之间的文件复制操作更简单。通过适当的配置&#xff0c;在两台Linux主机之间复制文件而无需输入密码&#xff0c;就像本地文…

React基础入门(一)

1、React简介 官网 英文官网: https://reactjs.org/ 中文官网: https://react.docschina.org/ 描述介绍 用于动态构建用户界面的 JavaScript 库(只关注于视图) 由Facebook开源 React特点 1、声明式编码 2、组件化编码 3、React Native 编写原生应用 4、高效&#xff08;优秀…

苹果不小心删了照片怎么恢复?苹果照片删除后如何恢复

苹果不小心删了照片怎么恢复&#xff1f;请保持冷静&#xff0c;不要往mac中写入新的东西&#xff0c;以防丢失的照片被覆盖。接下来&#xff0c;我们一起来探讨一下mac照片恢复的技巧。 方法一、从“最近删除”文件夹中恢复照片 使用照片管理应用程序&#xff08;例如Mac上的…

百趣代谢组学分享Lip-SMap:绘制代谢物和蛋白相互作用图谱的新方法

百趣代谢组学文献分享&#xff0c;自2014年瑞士苏黎世联邦理工学院的Picotti和她的研究小组开始用Lip-SRM法测量复杂蛋白质混合物的大量结构改性蛋白质以来[1]&#xff1b;该研究小组随后对方法进行改进&#xff0c;研究了复杂细胞基质中几种生物蛋白质的热稳定性&#xff0c;并…

袁树雄和唐磊关系迎来转折,王勇把他们两个和杨语莲拉进一个群

自从《早安隆回》火爆全网之后&#xff0c;创作者袁树雄就遭遇各种非议&#xff0c;就是他的同行唐磊老师&#xff0c;也勇敢站出来点评。唐磊老师也是一名音乐人&#xff0c;当年他凭借《丁香花》&#xff0c;一夜之间响彻大江南北&#xff0c;成为了家喻户晓的大明星。 虽然唐…

1行Python代码识别车牌号码,轻松写一个停车场管理系统,YYDS

大家好&#xff0c;这里是程序员晚枫。 你家停车场的摄像头&#xff0c;是怎么识别出你的车牌的&#xff1f;今天我们一起来看一下~ 识别车牌 识别车牌的代码很简单&#xff0c;只需要1行代码&#xff0c;如下所示。&#x1f447; # pip install poocr import poocr# 可以填…

Day1 CF847 div3 vp A-E

Dashboard - Codeforces Round #847 (Div. 3) - Codeforces感觉想试试隔一天vp一场div3/4&#xff0c;那就试试吧本来想把F补完再写的&#xff0c;但是感觉有点晚了&#xff0c;那就将就一下吧&#xff0c;F有缘单独补&#xff0c;嘻今晚浅浅vp了一下&#xff0c;一鼓作气地打出…

聊聊如何利用apollo与druid整合实现数据源动态热切

前言 本文的素材来源与某次和朋友技术交流&#xff0c;当时朋友就跟我吐槽说apollo不如nacos好用&#xff0c;而且他们还因为apollo发生过一次线上事故。 故事的背景大概是如下 前阵子朋友部门的数据库发生宕机&#xff0c;导致业务无法正常操作&#xff0c;当时朋友他们数据…

【JavaEE进阶】锁的特性

目录 一、乐观锁&悲观锁 二、公平锁&非公平锁 三、可重入锁&非可重入锁 四、读写锁&互斥锁 互斥锁 读写锁 读写锁涉及的类:ReentrantReadWriteLock 读写锁的优势: 五、轻量级锁&重量级锁 六、CAS ①基于CAS实现原子类 下面&#xff0c;来一段CAS的伪…

举个栗子~Tableau 技巧(250):创建 KPI 指标突出显示表

上一个栗子发出后&#xff0c;有数据粉反馈&#xff1a;有什么办法可以让全年的销售数据分层显示哇&#xff1f;业绩表现好、一般和差的分别使用不同的底色。 这个需求&#xff0c;如果考核的是名次&#xff0c;可以使用 &#x1f330; 用颜色突出显示前N项(TopN)和后N项(Bott…

samba设置文件共享

前提说明本人使用的系统如下共享文件的系统&#xff1a;ubuntu 版本&#xff1a;18.04.6目标系统&#xff1a;windows11安装sambasudo apt-get install samba修改配置文件sudo vim /etc/samba/smb.conf文件末尾添加以下内容[share] # 共享的名称&#xff0c;可以自行定义 c…

完整数据分析流程:Python中的Pandas如何解决业务问题

开篇 作为万金油式的胶水语言&#xff0c;Python几乎无所不能&#xff0c;在数据科学领域的作用更是不可取代。数据分析硬实力中&#xff0c;Python是一个非常值得投入学习的工具。 这其中&#xff0c;数据分析师用得最多的模块非Pandas莫属&#xff0c;如果你已经在接触它了…

c#入门-异步方法

异步方法 如果一个操作会返回Task&#xff0c;那么用这个操作续接后续操作&#xff0c;也会得到Task。 也就是说Task具有传染性&#xff0c;最终拼凑出来的Task非常复杂。 使用异步方法&#xff0c;可以简化Task的拼凑。 async修饰 异步方法需要添加async修饰符。并且通常方…

【前端】Vue项目:旅游App-(15)home:网络请求house数据、动态并组件化展示house列表信息

文章目录目标过程与代码content组件请求数据&#xff1a;houseListrequeststore控制台输出动态加载更多列表数据house-item组件阶段1&#xff1a;数据传送阶段2&#xff1a;对着目标写样式house-item-v9house-item-v9&#xff1a;debughouse-item-v3阶段3&#xff1a;总体效果效…

Android ANR触发机制(二)

上一篇文章看了Service的ANR触发流程&#xff0c;现在看一下其他三种ANR触发流程。 1.BroadcastReceiver触发ANR BroadcastReceiver超时是位于ActivityManager线程中的BroadcastQueue.BroadcastHandler收到BROADCAST_TIMEOUT_MSG消息时触发。 广播队列分为foreground队列和b…

基于Java+SpringBoot+Vue前后端分离学生管理系统设计与实现

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战✌ 博主作品&#xff1a;《微服务实战》专栏是本人的实战经验总结&#xff0c;《Spring家族及…

2023年二月份图形化二级打卡试题

活动时间 从2023年 2月1日至1月21日&#xff0c;每天一道编程题。 本次打卡的规则如下&#xff1a; &#xff08;1&#xff09;小朋友每天利用10~15分钟做一道编程题&#xff0c;遇到问题就来群内讨论&#xff0c;我来给大家答疑。 &#xff08;2&#xff09;小朋友做完题目后&…

数组中和为0的三个数

给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意: 答案中不可以包含重复的三元组。 示例 1: 输入: num…