druid 手动指定数据源_Springboot集成 Druid

2023-11-20

前言

对于数据访问层,无论是Sql还是NoSql,SpringBoot默认采用整合SpringData的方式进行统一管理,添加大量的自动配置,屏蔽了很多设置。引入了各种XxxTemplate和XxxRepository来简化我们队数据访问层的操作。

SpringBoot2.0默认是用com.zaxxer.hikari.HikariDataSource作为数据源。

2.0以下默认采用的是org.apache.tomcat.jdbc.pool.DataSource作为数据源。

Hikari的官方网站:http://brettwooldridge.github.io/HikariCP/

  • Hikari号称JAVA领域中最快的数据连接池,具体可以点连接进去看看
  • 阿里巴巴奉献给apache的Druid服务周到,里面有监控中心,可以帮助我们快速定位慢sql等。Druid官方网站:http://druid.io/

为什么HikariCP被号称为性能最好的Java数据库连接池,如何配置使用参考这篇博客:点击

注意事项:默认情况下使用com.zaxxer.hikari.HikariDataSource获取数据源时会抛出一个异常。说时区不对,需要我们修改mysql的时区:

SHOW VARIABLES LIKE '%time_zone%'
SET GLOBAL time_zone="+8:00"

集成Druid

Apache Druid(Incubating) - 面向列的分布式数据存储,非常适合为交互式应用程序提供动力,开发中使用的更多。

  • 以往我们都是直接引入Druid的依赖:
<dependency>       
    <groupId>com.alibaba</groupId>       
    <artifactId>druid</artifactId>       
    <version>1.1.12</version>   
</dependency>
  • apache中已经出了一套完美支持SpringBoot的方案所以说我们不使用上面的依赖而是使用:
  • 源码下载:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.22</version>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

配置YML文件

具体的参数配置可以去官网看看:
spring:
  datasource:
#   数据源基本配置
    username: root
    password: 123456
    url: jdbc:mysql://192.168.61.45:3306/springbootStudy?characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
#   数据源其他配置
    #初始化时建立物理连接的个数
    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
    max-pool-prepared-statement-per-connection-size: 20
    use-global-data-source-stat: true
    connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

新建配置文件

虽然我们配置了druid连接池的其它属性,但是不会生效。因为默认是使用的java.sql.Datasource的类来获取属性的,有些属性datasource没有。如果我们想让配置生效,需要手动创建Druid的配置文件。
package top.fulsun.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import org.springframework.boot.context.properties.ConfigurationProperties;
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.util.HashMap;
import java.util.Map;

/**
 * @Description: Druid的配置文件
 * @version: v1.0.0
 * @author: fulsun
 * @createDate 2020/4/29 19:27
 * @updateUser
 * @updateDate
 */
@Configuration
public class DruidConfig {
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource druidDataSource() {
        return new DruidDataSource();
    }
}

配置后台监控

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

我们接着在DruidDataSource里面配置监控中心:

/**
     * 配置监控服务器
     * @return 返回监控注册的servlet对象
     * @author SimpleWu
     */
@Bean
public 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 返回过滤器配置对象
     */
@Bean
public FilterRegistrationBean statFilter() {
    FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
    // 添加过滤规则
    filterRegistrationBean.addUrlPatterns("/*");
    // 忽略过滤格式
    filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*,");
    return filterRegistrationBean;
}

配置完后我们启动SpringBoot程序访问:http://localhost:8080/druid/就可以来到我们的登录页面面就是我们上面添加的控制台管理用户,我们可以在上面很好的看到运行状况.

访问:

操作SQL后

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

druid 手动指定数据源_Springboot集成 Druid 的相关文章

随机推荐

  • 计算机视觉parsing_parsenet.pth文件下载

    计算机视觉parsing parsenet pth文件下载 链接 https pan baidu com s 1gW3gLZ cPNHPawe0U5299w pwd ufd0 提取码 ufd0
  • vue打包后不使用服务器直接访问方法

    根据官网打包执行npm run build 后dist文件夹打开的index html 是空白 需要开启http服务器才能访问 以下是解决办法 1 找到config文件夹下的index文件 修改成 2 找到build文件夹下的until文件
  • 绝!OpenAI 年底上新,单卡 1 分钟生成 3D 点云,text-to 3D 告别高算力消耗时代

    内容一览 继 DALL E ChatGPT 之后 OpenAI 再发力 于近日发布 Point E 可以依据文本提示直接生成 3D 点云 关键词 OpenAI 3D 点云 Point E OpenAI 年底冲业绩 半个多月前发布的 Chat
  • 20篇必读论文!2023世界人工智能大会青年优秀论文奖公示

    2023年2月 关于推荐 2023世界人工智能大会青年优秀论文奖 参评论文的通知 发布 面向全球高校 科研院所 企业开展人工智能领域青年优秀论文征集活动 至征稿截止 共收到海内外参评论文235篇 包括国际相关知名高校 科研机构 企业 经初评
  • Postfix 554 5.7.1 Relay Access Denied

    D678453B4C672EB0 716 entry Postfix 554 5 7 1 Relay Access DeniedPostfix 安装后想在 Windows 或者 Linux 用邮件程序 Outlook或者Evolution等
  • 结构体排序问题

    题目如下 刚刚看到这道题的时候一点点思路都没有 连题目都没读懂 include
  • 非阻塞connect问题

    在发起一个网络连接时 如果不知道服务器是否正常 我们经常会阻塞在connect 在 linux网络编程 一书中讲述了使用select 实现非阻塞connect的方法 基本步骤如下 1 创建 socket 返回套接字描述符 2 调用 fcnt
  • vue pc端 输入验证码_云顶之奕手游国际服拳头riot账号注册验证码怎么点,出错解决方法...

    首先上图看下这个烦人的验证码 云顶之弈手游验证码 是不是点了N遍也点不对 今天我来告诉你怎么点 学会之后估计还是很难点对 其实 操作很简单 见上图 1 查看提示物 斑马线 消防栓 小汽车 公交车 山 树 烟囱等 2 点选对应图片 可能点完之
  • dataframe 使用拉格朗日插值填充缺失值

    本例中代码使用 jupyter 运行 问题场景 在处理dataframe时 可能会遇到少量数据缺失的情况 在连续缺失数据较少的情况可以考虑插值填充 本文调用了scipy库的lagrange x y 这个函数 参数x y分别是对应各个点的x值
  • Java 简单修饰符补充学习笔记(基础)

    前言 顾名思义 这里是补充修饰符的学习笔记 通配符 顾名思义即可 const 常变量修饰符 首先const是constant 恒定不变的 的缩写 const 就是描述变量为常量的修饰符 关键字 或者说 const 是定义常变量的关键字 用
  • Screen 对象

    解释 Screen 对象包含有关客户端显示屏幕的信息 Screen 对象属性 属性 说明 availHeight 返回屏幕的高度 不包括Windows任务栏 availWidth 返回屏幕的宽度 不包括Windows任务栏 colorDep
  • Docker容器网络

    一 虚拟化网络 Docker 镜像启动容器 默认Docker 容器可以直接访问互联网 前提 宿主机能够上外网 Docker 容器的IP 专属IP段 默认跟宿主机不在同网段 Docker Engine 引擎服务 默认会在宿主机创建网卡 命名
  • MVC模型图

    MVC图
  • 【联想RQ940】联想RQ940更换主板电池+重新设置BIOS

    RQ940服务器告警灯闪烁 连接管理口查看日志 判断问题为主板纽扣电池电压低 纽扣电池型号为CR2032 停业务 关机 下架 拆机 电池位于图片所示位置 可以先将左边RAID卡拆下来 方便更换电池 2 重新设置BIOS 更换电池后 由于BI
  • SpringBoot 微服务 详解

    1 注入 1 1 Bean对象管理 Spring Boot 由于没有XML文件 所以所有的Bean管理都放入在一个配置类中实现 配置类就是类上具有 Configuration的类 这个类就相当于之前的applicationContext x
  • 计算机竞赛 基于CNN实现谣言检测 - python 深度学习 机器学习

    文章目录 1 前言 1 1 背景 2 数据集 3 实现过程 4 CNN网络实现 5 模型训练部分 6 模型评估 7 预测结果 8 最后 1 前言 优质竞赛项目系列 今天要分享的是 基于CNN实现谣言检测 该项目较为新颖 适合作为竞赛课题方向
  • bilibili的评论ip属地显示未知

    现象 出于某些原因 我们在日常使用中的大部分平台都开启了IP地址显示 一般会显示当事人所在的地址 这其中就有一些奇怪的地址 在此不谈魔法 就比如我最近在刷B站的时候 就在评论区发现了一些显示 未知 的ip 而只要点进他们的主页还是会发现他们
  • 广度优先搜索(BFS)(队列实现) 走迷宫

    BFS应用 寻找最短路径或者遍历路径 树 图或者更抽象的 实现方法 队列 为什么bfs需要队列实现 队列的原理是先进先出 而广度优先搜索类似于树的层次遍历 从离根节点最近的点开始向外扩散 因此用队列将最先遍历的点存入 后遍历的点后存入 符合
  • react 父组件调用子组件的方法

    子组件中 const child forwardRef props ref gt useImperativeHandle ref gt 这里面的方法是暴露给父组件的 test console log 我是组件里的test方法 test2 t
  • druid 手动指定数据源_Springboot集成 Druid

    前言 对于数据访问层 无论是Sql还是NoSql SpringBoot默认采用整合SpringData的方式进行统一管理 添加大量的自动配置 屏蔽了很多设置 引入了各种XxxTemplate和XxxRepository来简化我们队数据访问层