最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot整合Druid實現(xiàn)數(shù)據(jù)庫連接池和監(jiān)控

 更新時間:2021年08月27日 10:12:56   作者:pan_junbiao  
Druid是Java語言中使用的比較多的數(shù)據(jù)庫連接池。Druid還提供了強大的監(jiān)控和擴展功能。面將介紹SpringBoot整合Druid實現(xiàn)數(shù)據(jù)庫連接池和監(jiān)控功能,感興趣的可以了解一下

1、Druid的簡介

Druid是Java語言中使用的比較多的數(shù)據(jù)庫連接池。Druid還提供了強大的監(jiān)控和擴展功能。下面將介紹SpringBoot整合Druid實現(xiàn)數(shù)據(jù)庫連接池和監(jiān)控功能。

官方文檔:Druid官方文檔

2、創(chuàng)建SpringBoot項目與數(shù)據(jù)表

【實例】SpringBoot整合Druid實現(xiàn)數(shù)據(jù)庫連接池和監(jiān)控,使用MyBaits操作數(shù)據(jù)庫,獲取用戶信息,如下圖:

2.1 創(chuàng)建項目

(1)創(chuàng)建SpringBoot項目,項目結(jié)構(gòu)如下圖:

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

在pom.xml配置信息文件中,添加Druid連接池、MyBatis、MySQL數(shù)據(jù)庫、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數(shù)據(jù)庫驅(qū)動 -->
<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 創(chuàng)建數(shù)據(jù)表

使用MySQL數(shù)據(jù)庫,創(chuàng)建 tb_user 用戶信息表,并添加數(shù)據(jù)。

-- 判斷數(shù)據(jù)表是否存在,存在則刪除
DROP TABLE IF EXISTS tb_user;
 
-- 創(chuàng)建“用戶信息”數(shù)據(jù)表
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 = '用戶信息表';
 
-- 添加數(shù)據(jù)
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實現(xiàn)數(shù)據(jù)庫連接池

3.1 Druid的配置

在 application.yml 配置文件中配置Druid數(shù)據(jù)庫連接池和監(jiān)控、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 #初始化時建立物理連接的個數(shù)
      max-active: 30 #最大連接池數(shù)量
      min-idle: 5 # 最小連接池數(shù)量
      druid.max-wait: 60000 #獲取連接時最大等待時間,單位毫秒
      time-between-eviction-runs-millis: 60000 #配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒
      min-evictable-idle-time-millis: 300000 #連接保持空閑而不被驅(qū)逐的最小時間
      validation-query: select 'x' #用來檢測連接是否有效的sql 必須是一個查詢語句:mysql中為 select 'x' oracle中為 select 1 from dual
      test-while-idle: true #建議配置為true,不影響性能,并且保證安全性。申請連接的時候檢測,如果空閑時間大于timeBetweenEvictionRunsMillis,執(zhí)行validationQuery檢測連接是否有效。
      test-on-borrow: false #申請連接時會執(zhí)行validationQuery檢測連接是否有效,開啟會降低性能,默認為true
      test-on-return: false #歸還連接時會執(zhí)行validationQuery檢測連接是否有效,開啟會降低性能,默認為true
      pool-prepared-statements: true #是否緩存preparedStatement,mysql5.5+建議開啟
      max-pool-prepared-statement-per-connection-size: 50 #要啟用PSCache,必須配置大于0,當大于0時,poolPreparedStatements自動觸發(fā)修改為true。
      filters: stat,wall #配置監(jiān)控統(tǒng)計攔截的filters,去掉后監(jiān)控界面sql無法統(tǒng)計
      connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500 #通過connectProperties屬性來打開mergeSql功能;慢SQL記錄
      use-global-data-source-stat: true #合并多個DruidDataSource的監(jiān)控數(shù)據(jù)
      #StatViewServlet配置
      stat-view-servlet.enabled: true #是否啟用StatViewServlet(監(jiān)控頁面)默認值為false
      stat-view-servlet.login-username: admin #設置訪問druid監(jiān)控頁的賬號,默認沒有
      stat-view-servlet.login-password: admin #設置訪問druid監(jiān)控頁的密碼,默認沒有
 
#MyBatis配置
mybatis:
  type-aliases-package: com.pjb.entity #別名定義
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #指定 MyBatis 所用日志的具體實現(xiàn),未指定時將自動查找
    map-underscore-to-camel-case: true #開啟自動駝峰命名規(guī)則(camel case)映射
    lazy-loading-enabled: true #開啟延時加載開關
    aggressive-lazy-loading: false #將積極加載改為消極加載(即按需加載),默認值就是false
    #lazy-load-trigger-methods: "" #阻擋不相干的操作觸發(fā),實現(xiàn)懶加載
    cache-enabled: true #打開全局緩存開關(二級環(huán)境),默認值就是true

注意:druid的配置節(jié)點是在datasource節(jié)點之下的,節(jié)點的層級關系不要寫錯了。

3.2 創(chuàng)建實體類(Entity層)

在com.pjb.entity包中,創(chuàng)建UserInfo類(用戶信息實體類)。

package com.pjb.entity;
 
import java.io.Serializable;
 
/**
 * 用戶信息實體類
 * @author pan_junbiao
 **/
public class UserInfo
{
    private int userId; //用戶編號
    private String userName; //用戶姓名
    private int age; //年齡
    private String blogUrl; //博客地址
    private String blogRemark; //博客信息
 
    //省略getter與setter方法...
}

3.3 數(shù)據(jù)庫映射層(Mapper層)

在com.pjb.mapper包中,創(chuàng)建UserMapper接口(用戶信息Mapper動態(tài)代理接口)。

package com.pjb.service;
 
import com.pjb.entity.UserInfo;
 
/**
 * 用戶信息業(yè)務邏輯接口
 * @author pan_junbiao
 **/
public interface UserService
{
    /**
     * 根據(jù)用戶ID,獲取用戶信息
     */
    public UserInfo getUserById(int userId);
 
    /**
     * 新增用戶,并獲取自增主鍵
     */
    public UserInfo insertUser(UserInfo userInfo);
 
    /**
     * 修改用戶
     */
    public UserInfo updateUser(UserInfo userInfo);
 
    /**
     * 刪除用戶
     */
    public int deleteUser(int userId);
}

3.4 業(yè)務邏輯層(Service層)

在com.pjb.service包下,創(chuàng)建UserService接口(用戶信息業(yè)務邏輯接口)。

package com.pjb.service;
 
import com.pjb.entity.UserInfo;
 
/**
 * 用戶信息業(yè)務邏輯接口
 * @author pan_junbiao
 **/
public interface UserService
{
    /**
     * 根據(jù)用戶ID,獲取用戶信息
     */
    public UserInfo getUserById(int userId);
 
    /**
     * 新增用戶,并獲取自增主鍵
     */
    public UserInfo insertUser(UserInfo userInfo);
 
    /**
     * 修改用戶
     */
    public UserInfo updateUser(UserInfo userInfo);
 
    /**
     * 刪除用戶
     */
    public int deleteUser(int userId);
}

在com.pjb.service.impl包下,創(chuàng)建UserServiceImpl類(用戶信息業(yè)務邏輯類)。

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;
 
/**
 * 用戶信息業(yè)務邏輯類
 * @author pan_junbiao
 **/
@Service
@Transactional
public class UserServiceImpl implements UserService
{
    @Autowired
    private UserMapper userMapper;
 
    /**
     * 根據(jù)用戶ID,獲取用戶信息
     */
    @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包中,創(chuàng)建UserController類(用戶控制器),實現(xiàn)用戶數(shù)據(jù)的查詢、新增、修改、刪除,并實現(xiàn)數(shù)據(jù)的返回。

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;
 
/**
 * 用戶信息控制器
 * @author pan_junbiao
 **/
@Controller
@RequestMapping("/user")
public class UserController
{
    @Autowired
    private UserService userService;
 
    /**
     * 獲取用戶信息
     */
    @RequestMapping("getUserById")
    public ModelAndView getUserById(int userId)
    {
        //根據(jù)用戶ID,獲取用戶信息
        UserInfo userInfo = userService.getUserById(userId);
 
        if(userInfo==null)
        {
            userInfo = new UserInfo();
        }
 
        //返回結(jié)果
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("userInfo",userInfo);
        modelAndView.setViewName("/user-info.html");
        return modelAndView;
    }
 
    /**
     * 新增用戶
     */
    @ResponseBody
    @RequestMapping("insertUser")
    public boolean insertUser()
    {
        //創(chuàng)建新用戶
        UserInfo userInfo = new UserInfo();
        userInfo.setUserName("pan_junbiao的博客");
        userInfo.setAge(32);
        userInfo.setBlogUrl("https://blog.csdn.net/pan_junbiao");
        userInfo.setBlogRemark("您好,歡迎訪問 pan_junbiao的博客");
 
        //執(zhí)行新增方法
        userService.insertUser(userInfo);
 
        //返回結(jié)果
        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的博客");
 
        //執(zhí)行修改方法
        userService.updateUser(userInfo);
 
        //返回結(jié)果
        return true;
    }
 
    /**
     * 刪除用戶
     */
    @ResponseBody
    @RequestMapping("deleteUser")
    public boolean deleteUser(int userId)
    {
        //執(zhí)行新增方法
        int result = userService.deleteUser(userId);
 
        //返回結(jié)果
        return result > 0 ? true : false;
    }
}

3.6 顯示頁面(View層)

在 resources/templates 目錄下,創(chuàng)建 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>

執(zhí)行結(jié)果:

(1)使用Druid數(shù)據(jù)庫連接池從數(shù)據(jù)表中,獲取用戶信息,如下圖:

(2)控制臺輸出的信息,如下圖:

4、Druid實現(xiàn)監(jiān)控功能

Druid實現(xiàn)監(jiān)控功能,主要是在配置中,包括配置是否啟動監(jiān)控頁面、設置訪問監(jiān)控頁面的登錄賬號、密碼等。如下圖:

配置完成后,啟動項目,在瀏覽器中直接輸入如下地址:

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

登錄頁面:

Druid監(jiān)控首頁:

源代碼下載:https://github.com/kevinpanjunbiao/DruidDemo

到此這篇關于SpringBoot整合Druid實現(xiàn)數(shù)據(jù)庫連接池和監(jiān)控的文章就介紹到這了,更多相關SpringBoot Druid數(shù)據(jù)庫連接池和監(jiān)控內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • AsyncHttpClient?ChannelPool線程池頻道池源碼流程解析

    AsyncHttpClient?ChannelPool線程池頻道池源碼流程解析

    這篇文章主要為大家介紹了AsyncHttpClient ChannelPool線程池頻道池源碼流程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • 快速入手IntelliJ IDEA基本配置

    快速入手IntelliJ IDEA基本配置

    IntelliJ IDEA是java編程語言開發(fā)的集成環(huán)境,本篇主要介紹了對它的安裝、配置maven倉庫、調(diào)試方法、常用的插件推薦、快捷鍵大全與常用快捷鍵說明,感興趣的朋友一起看看吧
    2021-10-10
  • Java?Spring事務管理超詳細指南

    Java?Spring事務管理超詳細指南

    Spring的事務管理提供了聲明式事務管理,支持聲明式事務的控制,簡化了事務管理的復雜性,下面這篇文章主要介紹了Java?Spring事務管理的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2026-01-01
  • java dom4j解析xml用到的幾個方法

    java dom4j解析xml用到的幾個方法

    這篇文章主要介紹了java dom4j解析xml用到的幾個方法,有需要的朋友可以參考一下
    2013-12-12
  • Mybatis實體類對象入?yún)⒉樵兊墓P記

    Mybatis實體類對象入?yún)⒉樵兊墓P記

    這篇文章主要介紹了Mybatis實體類對象入?yún)⒉樵兊墓P記,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java之遍歷枚舉值問題

    Java之遍歷枚舉值問題

    這篇文章主要介紹了Java之遍歷枚舉值問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Spring Bean初始化的三種常用方式(易懂版)

    Spring Bean初始化的三種常用方式(易懂版)

    在Spring框架開發(fā)中,Bean的生命周期管理是核心基礎知識點,而Bean初始化作為生命周期中的關鍵環(huán)節(jié),負責在Bean實例創(chuàng)建并完成依賴注入后,執(zhí)行資源加載、參數(shù)配置、緩存初始化等核心業(yè)務邏輯,本文將詳細拆解Spring中3種主流的Bean初始化方式,需要的朋友可以參考下
    2025-12-12
  • Java安全之CC1利用鏈詳解

    Java安全之CC1利用鏈詳解

    這篇文章主要介紹了Java安全之CC1利用鏈的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • Spring Boot整合Swagger測試api構(gòu)建全紀錄

    Spring Boot整合Swagger測試api構(gòu)建全紀錄

    這篇文章主要給大家介紹了關于Spring Boot整合Swagger測試api構(gòu)建的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-01-01
  • SpringMVC執(zhí)行步驟、Model的使用詳解

    SpringMVC執(zhí)行步驟、Model的使用詳解

    這篇文章主要介紹了SpringMVC執(zhí)行步驟、Model的使用詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評論

辰溪县| 宁明县| 峨眉山市| 呼玛县| 故城县| 上饶市| 抚顺县| 临桂县| 时尚| 兴义市| 阿图什市| 武功县| 搜索| 达尔| 潞西市| 钟山县| 汉源县| 金阳县| 辽源市| 卢龙县| 江北区| 金坛市| 彰化县| 巢湖市| 云阳县| 邮箱| 库伦旗| 枣庄市| 北辰区| 高陵县| 巴彦县| 囊谦县| 定结县| 绥棱县| 玉溪市| 东乌| 古丈县| 交城县| 正蓝旗| 罗定市| 开鲁县|