iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SpringBoot整合Druid实现数据库连接池和监控
  • 704
分享到

SpringBoot整合Druid实现数据库连接池和监控

2024-04-02 19:04:59 704人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录1、Druid的简介2、创建SpringBoot项目与数据表2.1 创建项目2.2 创建数据表3、Druid实现数据库连接池3.1 Druid的配置3.2 创建实体类(Entit

1、Druid的简介

Druid是Java语言中使用的比较多的数据库连接池。Druid还提供了强大的监控和扩展功能。下面将介绍springBoot整合Druid实现数据库连接池和监控功能。

官方文档:《Druid官方文档》

2、创建SpringBoot项目与数据表

【实例】SpringBoot整合Druid实现数据库连接池和监控,使用MyBaits操作数据库,获取用户信息,如下图:

2.1 创建项目

(1)创建SpringBoot项目,项目结构如下图:

(2)使用Maven添加依赖文件

在pom.xml配置信息文件中,添加Druid连接池、mybatisMysql数据库、Thymeleaf模板引擎等相关依赖:


<!-- 引入Druid连接池 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.23</version>
</dependency>
 
<!-- MyBatis与SpringBoot整合依赖 -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.3</version>
</dependency>
 
<!-- mysql的JDBC数据库驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.20</version>
</dependency>
 
<!-- 引入Thymeleaf模板引擎 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

2.2 创建数据表

使用MySQL数据库,创建 tb_user 用户信息表,并添加数据。


-- 判断数据表是否存在,存在则删除
DROP TABLE IF EXISTS tb_user;
 
-- 创建“用户信息”数据表
CREATE TABLE IF NOT EXISTS tb_user
( 
	user_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户编号',
	user_name VARCHAR(50) NOT NULL COMMENT '用户姓名',
	age INT DEFAULT(0) NOT NULL COMMENT '年龄',
	blog_url VARCHAR(50) NOT NULL COMMENT '博客地址',
	blog_remark VARCHAR(50) COMMENT '博客信息'
) COMMENT = '用户信息表';
 
-- 添加数据
INSERT INTO tb_user(user_name,age,blog_url,blog_remark) VALUES('pan_junbiao的博客',32,'https://blog.csdn.net/pan_junbiao','您好,欢迎访问 pan_junbiao的博客');

3、Druid实现数据库连接池

3.1 Druid的配置

在 application.yml 配置文件中配置Druid数据库连接池和监控、MyBatis配置。


#Spring配置
spring:
  #使用Thymeleaf模板引擎
  thymeleaf:
    mode: HTML5
    encoding: UTF-8
    cache: false  #使用Thymeleaf模板引擎,关闭缓存
    servlet:
      content-type: text/html
  #JDBC配置
  datasource:
    url: jdbc:mysql://localhost:3306/db_admin?useSSL=false&amp
    username: root
    passWord: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    #Druid连接池配置
    druid:
      initial-size: 5 #初始化时建立物理连接的个数
      max-active: 30 #最大连接池数量
      min-idle: 5 # 最小连接池数量
      druid.max-wait: 60000 #获取连接时最大等待时间,单位毫秒
      time-between-eviction-runs-millis: 60000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      min-evictable-idle-time-millis: 300000 #连接保持空闲而不被驱逐的最小时间
      validation-query: select 'x' #用来检测连接是否有效的sql 必须是一个查询语句:mysql中为 select 'x' oracle中为 select 1 from dual
      test-while-idle: true #建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
      test-on-borrow: false #申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
      test-on-return: false #归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
      pool-prepared-statements: true #是否缓存preparedStatement,mysql5.5+建议开启
      max-pool-prepared-statement-per-connection-size: 50 #要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。
      filters: stat,wall #配置监控统计拦截的filters,去掉后监控界面sql无法统计
      connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500 #通过connectProperties属性来打开mergeSql功能;慢SQL记录
      use-global-data-source-stat: true #合并多个DruidDataSource的监控数据
      #StatViewServlet配置
      stat-view-servlet.enabled: true #是否启用StatViewServlet(监控页面)默认值为false
      stat-view-servlet.login-username: admin #设置访问druid监控页的账号,默认没有
      stat-view-servlet.login-password: admin #设置访问druid监控页的密码,默认没有
 
#MyBatis配置
mybatis:
  type-aliases-package: com.pjb.entity #别名定义
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #指定 MyBatis 所用日志的具体实现,未指定时将自动查找
    map-underscore-to-camel-case: true #开启自动驼峰命名规则(camel case)映射
    lazy-loading-enabled: true #开启延时加载开关
    aggressive-lazy-loading: false #将积极加载改为消极加载(即按需加载),默认值就是false
    #lazy-load-trigger-methods: "" #阻挡不相干的操作触发,实现懒加载
    cache-enabled: true #打开全局缓存开关(二级环境),默认值就是true

注意:druid的配置节点是在datasource节点之下的,节点的层级关系不要写错了。

3.2 创建实体类(Entity层)

在com.pjb.entity包中,创建UserInfo类(用户信息实体类)。


package com.pjb.entity;
 
import java.io.Serializable;
 

public class UserInfo
{
    private int userId; //用户编号
    private String userName; //用户姓名
    private int age; //年龄
    private String blogUrl; //博客地址
    private String blogRemark; //博客信息
 
    //省略getter与setter方法...
}

3.3 数据库映射层(Mapper层)

在com.pjb.mapper包中,创建UserMapper接口(用户信息Mapper动态代理接口)。


package com.pjb.service;
 
import com.pjb.entity.UserInfo;
 

public interface UserService
{
    
    public UserInfo getUserById(int userId);
 
    
    public UserInfo insertUser(UserInfo userInfo);
 
    
    public UserInfo updateUser(UserInfo userInfo);
 
    
    public int deleteUser(int userId);
}

3.4 业务逻辑层(Service层)

在com.pjb.service包下,创建UserService接口(用户信息业务逻辑接口)。


package com.pjb.service;
 
import com.pjb.entity.UserInfo;
 

public interface UserService
{
    
    public UserInfo getUserById(int userId);
 
    
    public UserInfo insertUser(UserInfo userInfo);
 
    
    public UserInfo updateUser(UserInfo userInfo);
 
    
    public int deleteUser(int userId);
}

在com.pjb.service.impl包下,创建UserServiceImpl类(用户信息业务逻辑类)。


package com.pjb.service.impl;
 
import com.pjb.entity.UserInfo;
import com.pjb.mapper.UserMapper;
import com.pjb.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 

@Service
@Transactional
public class UserServiceImpl implements UserService
{
    @Autowired
    private UserMapper userMapper;
 
    
    @Override
    public UserInfo getUserById(int userId)
    {
        return userMapper.getUserById(userId);
    }
 
    
    @Override
    public UserInfo insertUser(UserInfo userInfo)
    {
        userMapper.insertUser(userInfo);
        return userInfo;
    }
 
    
    @Override
    public UserInfo updateUser(UserInfo userInfo)
    {
        userMapper.updateUser(userInfo);
        return userInfo;
    }
 
    
    @Override
    public int deleteUser(int userId)
    {
        return userMapper.deleteUser(userId);
    }
}

在Service类上加上@Transactional事务注解,否则将会在控制台打印以下信息:

3.5 控制器方法(Controller层)

在com.pjb.controller包中,创建UserController类(用户控制器),实现用户数据的查询、新增、修改、删除,并实现数据的返回。


package com.pjb.controller;
 
import com.pjb.entity.UserInfo;
import com.pjb.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.WEB.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
 

@Controller
@RequestMapping("/user")
public class UserController
{
    @Autowired
    private UserService userService;
 
    
    @RequestMapping("getUserById")
    public ModelAndView getUserById(int userId)
    {
        //根据用户ID,获取用户信息
        UserInfo userInfo = userService.getUserById(userId);
 
        if(userInfo==null)
        {
            userInfo = new UserInfo();
        }
 
        //返回结果
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("userInfo",userInfo);
        modelAndView.setViewName("/user-info.html");
        return modelAndView;
    }
 
    
    @ResponseBody
    @RequestMapping("insertUser")
    public boolean insertUser()
    {
        //创建新用户
        UserInfo userInfo = new UserInfo();
        userInfo.setUserName("pan_junbiao的博客");
        userInfo.setAge(32);
        userInfo.setBlogUrl("Https://blog.csdn.net/pan_junbiao");
        userInfo.setBlogRemark("您好,欢迎访问 pan_junbiao的博客");
 
        //执行新增方法
        userService.insertUser(userInfo);
 
        //返回结果
        return userInfo.getUserId() > 0 ? true : false;
    }
 
    
    @ResponseBody
    @RequestMapping("updateUser")
    public boolean updateUser(int userId)
    {
        UserInfo userInfo = new UserInfo();
        userInfo.setUserId(userId);
        userInfo.setUserName("pan_junbiao的博客_02");
        userInfo.setAge(35);
        userInfo.setBlogUrl("https://blog.csdn.net/pan_junbiao");
        userInfo.setBlogRemark("您好,欢迎访问 pan_junbiao的博客");
 
        //执行修改方法
        userService.updateUser(userInfo);
 
        //返回结果
        return true;
    }
 
    
    @ResponseBody
    @RequestMapping("deleteUser")
    public boolean deleteUser(int userId)
    {
        //执行新增方法
        int result = userService.deleteUser(userId);
 
        //返回结果
        return result > 0 ? true : false;
    }
}

3.6 显示页面(View层)

在 resources/templates 目录下,创建 user-info.html 用户信息显示页面。


<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>用户信息</title>
    <meta name="author" content="pan_junbiao的博客">
    <style>
        table { border-collapse: collapse; margin-bottom: 10px}
        table,table tr th, table tr td { border:1px solid #000000; padding: 5px 10px;}
    </style>
</head>
<body>
<div align="center">
    <table>
        <caption>用户信息</caption>
        <tr>
            <th>用户ID:</th>
            <td th:text="${userInfo.userId}"></td>
        </tr>
        <tr>
            <th>用户名称:</th>
            <td th:text="${userInfo.userName}"></td>
        </tr>
        <tr>
            <th>年龄:</th>
            <td th:text="${userInfo.age}"></td>
        </tr>
        <tr>
            <th>博客地址:</th>
            <td th:text="${userInfo.blogUrl}"></td>
        </tr>
        <tr>
            <th>备注信息:</th>
            <td th:text="${userInfo.blogRemark}"></td>
        </tr>
    </table>
</div>
</body>
</html>

执行结果:

(1)使用Druid数据库连接池从数据表中,获取用户信息,如下图:

(2)控制台输出的信息,如下图:

4、Druid实现监控功能

Druid实现监控功能,主要是在配置中,包括配置是否启动监控页面、设置访问监控页面的登录账号、密码等。如下图:

配置完成后,启动项目,在浏览器中直接输入如下地址:

http://127.0.0.1:8080/druid/login.html
http://127.0.0.1:8080/druid/index.html

登录页面:

Druid监控首页:

源代码下载:https://GitHub.com/kevinpanjunbiao/DruidDemo

到此这篇关于SpringBoot整合Druid实现数据库连接池和监控的文章就介绍到这了,更多相关SpringBoot Druid数据库连接池和监控内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SpringBoot整合Druid实现数据库连接池和监控

本文链接: https://www.lsjlt.com/news/133774.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringBoot整合Druid实现数据库连接池和监控
    目录1、Druid的简介2、创建SpringBoot项目与数据表2.1 创建项目2.2 创建数据表3、Druid实现数据库连接池3.1 Druid的配置3.2 创建实体类(Entit...
    99+
    2024-04-02
  • springboot项目整合druid数据库连接池的实现
    Druid连接池是阿里巴巴开源的数据库连接池项目,后来贡献给Apache开源; Druid的作用是负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再...
    99+
    2024-04-02
  • 如何在SpringBoot 中使用 Druid 数据库连接池
    目录1.Maven中的pom文件2.SpringBoot 配置文件3.配置Druid数据源实例4.过滤器和Servlet5.使用@ServletComponentScan注解,6.D...
    99+
    2024-04-02
  • 怎么在SpringBoot中使用Druid数据库连接池
    这篇文章主要介绍怎么在SpringBoot中使用Druid数据库连接池,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Druid是阿里开源的一款数据库连接池,除了常规的连接池功能外,它还提供了强大的监控和扩展功能。这对...
    99+
    2023-06-14
  • Java实现数据连接池Druid举例
    目录开篇Druid的调试参考开篇 Druid号称是Java语言中最好的数据库连接池,并且能够提供强大的监控和扩展功能。作为日常使用较多的数据库连接组件,纯粹个人兴趣研究下理解下的实现...
    99+
    2024-04-02
  • 数据库连接池(Druid(德鲁伊))
    JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤 在主程序(如servlet、beans)中建立数据库连接 进行sql操作 断开数据库连接   这种模式开发,存在的问题: 普通的JDBC数据库连...
    99+
    2023-09-14
    数据库 java sql
  • 数据库连接池druid参数详解
    spring: datasource: druid: # 指定数据源类型为DruidDataSource type: com.alibaba.druid.pool.DruidDataSource # 数...
    99+
    2023-09-02
    数据库 java mybatis
  • 使用druid如何实现配置数据库连接池
    本篇文章为大家展示了使用druid如何实现配置数据库连接池 ,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。druid的配置项如下配置缺省值说明name 配置这个属性的意义在于,如果存在多个...
    99+
    2023-05-31
    数据库连接池 druid
  • Java 数据库连接池Druid 的介绍
    目录1、配置参数2、使用2.1、直接使用2.1.1、引入依赖2.1.2、使用例子2.2、在 SpringBoot 中使用2.1.1、引入依赖2.1.2、单数据源2.1.3、多数据源2...
    99+
    2024-04-02
  • SpringBoot整合Druid数据源的方法实现
    目录1、在创建SpringBoot项目的时候,在pom.xml maven中添加依赖:2、在 application.yml(或aproperties)中添加相应的配置:3、 log...
    99+
    2024-04-02
  • Druid数据库连接池如何使用
    这篇文章主要介绍了Druid数据库连接池如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Druid数据库连接池如何使用文章都会有所收获,下面我们一起来看看吧。概述数据库连接池是个容器,负责分配、管理数据库...
    99+
    2023-07-05
  • SpringBoot集成Druid连接池进行SQL监控的问题解析
    Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。 Druid的监控统计功能是通过filter-chain扩展实现...
    99+
    2024-04-02
  • SpringBoot集成Druid连接池进行SQL监控的示例分析
    这篇文章主要为大家展示了“SpringBoot集成Druid连接池进行SQL监控的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SpringBoot集成Druid连接池进行SQL监控的示...
    99+
    2023-06-20
  • 如何在springboot项目中使用druid数据库连接池
    如何在springboot项目中使用druid数据库连接池?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Druid连接池是阿里巴巴开源的数据库连接池项目,后来贡献给Apac...
    99+
    2023-06-14
  • SpringBoot4.5.2 整合HikariCP 数据库连接池操作
    目录SpringBoot4.5.2 整合HikariCP 数据库连接池引入application.yaml输出HikariCP连接池及其在springboot中的配置主要配置如下Sp...
    99+
    2024-04-02
  • springboot druid数据库连接池连接失败后一直重连怎么解决
    这篇文章主要介绍了springboot druid数据库连接池连接失败后一直重连怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇springboot druid数据库连接池连接失败后一...
    99+
    2023-06-30
  • Hikari连接池使用SpringBoot配置JMX监控实现
    Hikari是Spring Boot默认的数据库连接池。区别于C3P0直接通过连接池对象获取各项状态指标,Hikari需要通过JMX来获取。Demo如下,采用Spring Boot集...
    99+
    2024-04-02
  • 使用Spring Boot如何实现集成Druid数据库连接池
    使用Spring Boot如何实现集成Druid数据库连接池?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1. 前言Druid数据库连接池由阿里巴巴开源,号称是java语言...
    99+
    2023-05-31
    springboot 数据库连接池 druid
  • 可观测性-Metrics-数据库连接池HikariCP监控
    文章目录 非SpringBoot环境添加依赖示例指标详解 Spring Boot环境手动自动 关于Sql日志记录和慢日志 非SpringBoot环境 HikariCP其...
    99+
    2023-09-20
    数据库 java mysql
  • 数据库连接池Druid与Hikari对比详解
    目录Druid竞品对比Hikari 官方性能测试数据对比总结Druid竞品对比 功能类别功能DruidHikariCPDBCPTomcat-jdbcC3P0性能PSCache是否是是是LRU是否是是是SLB负载均衡支持...
    99+
    2023-02-02
    数据库连接池选DruidHikar 数据库连接池
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作