【WEEK12】 【DAY2】整合Druid數據源【中文版】

2024.5.14 Tuesday

目錄

  • 12.整合Druid數據源
    • 12.1.Druid簡介
    • 12.2.配置數據源
      • 12.2.1.添加Druid數據源依賴
      • 12.2.2.切換數據源
      • 12.2.3.運行Springboot04DataApplicationTests.java
      • 12.2.4.嘗試使用Druid數據源的專有配置
      • 12.2.5.導入Log4j 的依賴
      • 12.2.6.新建config文件夾
      • 12.2.7.修改測試類并運行檢查配置參數是否生效
    • 12.3.配置Druid數據源監控
      • 12.3.1.修改DruidConfig.java
      • 12.3.2.重啟并訪問http://localhost:8080/druid
      • 12.3.3.配置Druid web監控filter過濾器

12.整合Druid數據源

12.1.Druid簡介

Java程序很大一部分要操作數據庫,為了提高性能操作數據庫的時候,又不得不使用數據庫連接池。
Druid 是阿里巴巴開源平臺上一個數據庫連接池實現,結合了 C3P0、DBCP 等 DB 池的優點,同時加入了日志監控。
Druid 可以很好的監控 DB 池連接和 SQL 的執行情況,天生就是針對監控而生的 DB 連接池。
Druid已經在阿里巴巴部署了超過600個應用,經過一年多生產環境大規模部署的嚴苛考驗。
Spring Boot 2.0 以上默認使用 Hikari 數據源,可以說 Hikari 與 Driud 都是當前 Java Web 上最優秀的數據源,我們來重點介紹 Spring Boot 如何集成 Druid 數據源,如何實現數據庫監控。
Github地址:https://github.com/alibaba/druid/
com.alibaba.druid.pool.DruidDataSource 基本配置參數如下:
在這里插入圖片描述
在這里插入圖片描述

12.2.配置數據源

12.2.1.添加Druid數據源依賴

https://mvnrepository.com/artifact/com.alibaba/druid/1.1.21
在這里插入圖片描述
修改pom.xml,在dependencies中添加這段依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.13</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>springboot-04-data</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot-04-data</name><description>springboot-04-data</description><properties><java.version>8</java.version></properties><dependencies><!--Druid--><!-- https://mvnrepository.com/artifact/com.alibaba/druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.21</version></dependency><!--JDBC--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--MySQL--><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

重啟maven進行下載,可以點開源碼查看
在這里插入圖片描述

12.2.2.切換數據源

修改application.yaml

spring:datasource:username: rootpassword: 123456#假如時區報錯,就增加一個時區的配置,和其他配置用&連接,如:serverTimezone=UTCurl: jdbc:mysql://localhost:3306/p37jdbc?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8driver-class-name: com.mysql.cj.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSource

12.2.3.運行Springboot04DataApplicationTests.java

此時默認數據源已經改變,但是數據庫底層仍然是JDBC:
在這里插入圖片描述

12.2.4.嘗試使用Druid數據源的專有配置

修改修改application.yaml

spring:datasource:username: rootpassword: 123456#假如時區報錯,就增加一個時區的配置,和其他配置用&連接,如:serverTimezone=UTCurl: jdbc:mysql://localhost:3306/p37jdbc?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8driver-class-name: com.mysql.cj.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSource#Spring Boot 默認是不注入這些屬性值的,需要自己綁定#druid 數據源專有配置initialSize: 5minIdle: 5maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: true#配置監控統計攔截的filters,stat:監控統計; log4j:日志記錄; wall:防御sql注入#如果允許時報錯  java.lang.ClassNotFoundException: org.apache.log4j.Priority#則導入 log4j 依賴即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4jfilters: stat,wall,log4jmaxPoolPreparedStatementPerConnectionSize: 20useGlobalDataSourceStat: trueconnectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

12.2.5.導入Log4j 的依賴

pom.xml中添加依賴

<!--log4j-->
<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version>
</dependency>

12.2.6.新建config文件夾

現在需要程序員自己為 DruidDataSource 綁定全局配置文件中的參數,再添加到容器中,而不再使用 Spring Boot 的自動生成了;我們需要 自己添加 DruidDataSource 組件到容器中,并綁定屬性;
新建DruidConfig.java
在這里插入圖片描述

package com.P31.config;import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.sql.DataSource;@Configuration
public class DruidConfig {/*將自定義的 Druid數據源添加到容器中,不再讓 Spring Boot 自動創建綁定全局配置文件中的 druid 數據源屬性到 com.alibaba.druid.pool.DruidDataSource從而讓它們生效@ConfigurationProperties(prefix = "spring.datasource"):作用就是將 全局配置文件中前綴為 spring.datasource的屬性值注入到 com.alibaba.druid.pool.DruidDataSource 的同名參數中*/@ConfigurationProperties(prefix = "spring.datasource")  //綁定@Beanpublic DataSource druidDataSource(){return new DruidDataSource();}
}

12.2.7.修改測試類并運行檢查配置參數是否生效

Springboot04DataApplicationTests.java

package com.P31;import com.alibaba.druid.pool.DruidDataSource;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;@SpringBootTest
class Springboot04DataApplicationTests {@AutowiredDataSource dataSource;@Testvoid contextLoads() throws SQLException {//查看默認的數據源System.out.println(dataSource.getClass());//獲取數據庫連接Connection connection = dataSource.getConnection();System.out.println(connection);DruidDataSource druidDataSource = (DruidDataSource) dataSource;System.out.println("druidDataSource 數據源最大連接數:" + druidDataSource.getMaxActive());System.out.println("druidDataSource 數據源初始化連接數:" + druidDataSource.getInitialSize());//關閉connection.close();}}

在這里插入圖片描述

12.3.配置Druid數據源監控

Druid數據源具有監控的功能,而且提供了一個web頁面便于查看。

12.3.1.修改DruidConfig.java

package com.P31.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;@Configuration
public class DruidConfig {/*將自定義的 Druid數據源添加到容器中,不再讓 Spring Boot 自動創建綁定全局配置文件中的 druid 數據源屬性到 com.alibaba.druid.pool.DruidDataSource從而讓它們生效@ConfigurationProperties(prefix = "spring.datasource"):作用就是將 全局配置文件中前綴為 spring.datasource的屬性值注入到 com.alibaba.druid.pool.DruidDataSource 的同名參數中*/@ConfigurationProperties(prefix = "spring.datasource")  //綁定@Beanpublic DataSource druidDataSource(){return new DruidDataSource();}//后臺監控//配置 Druid 監控管理后臺的Servlet;//因為SpringBoot內置了Servlet容器,所以沒有web.xml文件,所以使用Spring Boot的注冊Servlet方式(ServletRegistrationBean)@Beanpublic ServletRegistrationBean statViewServlet(){ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(),"/druid/*");//后臺需要有人登錄,賬號密碼配置//點開setInitParameters查看源碼,可以看到他需要的參數:public void setInitParameters(Map<String, String> initParameters)HashMap<String,String> initParameters = new HashMap<>();//這些參數可以在 com.alibaba.druid.support.http.StatViewServlet的父類 com.alibaba.druid.support.http.ResourceServlet 中找到//增加配置//loginUsername loginPassword是固定參數initParameters.put("loginUsername","admin");    //后臺管理界面的登錄賬號initParameters.put("loginPassword","123456");   //后臺管理界面的登錄密碼//允許可以訪問的用戶initParameters.put("allow",""); //為空則所有人都可以訪問//initParams.put("allow", "localhost"):表示只有本機可以訪問//initParams.put("allow", ""):為空或者為null時,表示允許所有訪//禁止訪問的用戶//deny:Druid 后臺拒絕誰訪問//initParams.put("kuangshen", "192.168.1.20");表示禁止此ip訪問bean.setInitParameters(initParameters);   //設置初始化參數return bean;}
}

12.3.2.重啟并訪問http://localhost:8080/druid

將自動跳轉到http://localhost:8080/druid/login.html
在這里插入圖片描述
登錄參數錯誤:
在這里插入圖片描述
成功登錄:
在這里插入圖片描述
跳轉到:
在這里插入圖片描述
運行http://localhost:8080/userList,點擊導航欄中的“SQL監控”可見:
在這里插入圖片描述

也可查看SQL防火墻:
在這里插入圖片描述

12.3.3.配置Druid web監控filter過濾器

package com.P31.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.util.Arrays;
import java.util.HashMap;
import java.util.Map;@Configuration
public class DruidConfig {/*將自定義的 Druid數據源添加到容器中,不再讓 Spring Boot 自動創建綁定全局配置文件中的 druid 數據源屬性到 com.alibaba.druid.pool.DruidDataSource從而讓它們生效@ConfigurationProperties(prefix = "spring.datasource"):作用就是將 全局配置文件中前綴為 spring.datasource的屬性值注入到 com.alibaba.druid.pool.DruidDataSource 的同名參數中*/@ConfigurationProperties(prefix = "spring.datasource")  //綁定@Beanpublic DataSource druidDataSource(){return new DruidDataSource();}//后臺監控//配置 Druid 監控管理后臺的Servlet;//因為SpringBoot內置了Servlet容器,所以沒有web.xml文件,所以使用Spring Boot的注冊Servlet方式(ServletRegistrationBean)@Beanpublic ServletRegistrationBean statViewServlet(){ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(),"/druid/*");//后臺需要有人登錄,賬號密碼配置//點開setInitParameters查看源碼,可以看到他需要的參數:public void setInitParameters(Map<String, String> initParameters)HashMap<String,String> initParameters = new HashMap<>();//這些參數可以在 com.alibaba.druid.support.http.StatViewServlet的父類 com.alibaba.druid.support.http.ResourceServlet 中找到//增加配置//loginUsername loginPassword是固定參數initParameters.put("loginUsername","admin");    //后臺管理界面的登錄賬號initParameters.put("loginPassword","123456");   //后臺管理界面的登錄密碼//允許可以訪問的用戶initParameters.put("allow",""); //為空則所有人都可以訪問//initParams.put("allow", "localhost"):表示只有本機可以訪問//initParams.put("allow", ""):為空或者為null時,表示允許所有訪//禁止訪問的用戶//deny:Druid 后臺拒絕誰訪問//initParams.put("kuangshen", "192.168.1.20");表示禁止此ip訪問bean.setInitParameters(initParameters);   //設置初始化參數return bean;}//filter//配置 Druid 監控 之  web 監控的 filter//WebStatFilter:用于配置Web和Druid數據源之間的管理關聯監控統計@Beanpublic FilterRegistrationBean webStatFilter(){FilterRegistrationBean bean = new FilterRegistrationBean();bean.setFilter(new WebStatFilter());//exclusions:設置哪些請求被過濾(排除)->不進行統計Map<String,String> initParameters = new HashMap<>();initParameters.put("exclusions","*.js,*.css,/druid/*,/jdbc/*");bean.setInitParameters(initParameters);//"/*" 表示過濾所有請求bean.setUrlPatterns(Arrays.asList("/*"));return bean;}
}

按需配置即可。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/12601.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/12601.shtml
英文地址,請注明出處:http://en.pswp.cn/web/12601.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

短視頻人設定位有哪些:四川京之華錦信息技術公司

短視頻人設定位有哪些&#xff1a;打造獨特魅力的關鍵 隨著短視頻平臺的興起&#xff0c;越來越多的內容創作者開始涌現&#xff0c;他們憑借各自獨特的魅力在網絡世界中嶄露頭角。而在這其中&#xff0c;一個成功的短視頻賬號背后&#xff0c;往往有一個清晰、鮮明的人設定位…

安卓APP+TCP+服務器端

1、在.xml文件中添加權限 <uses-permission android:name"android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name"android.permission.INTERNET"/>2、修改顯示界面 <?xml version"1.0" encoding"utf-8&…

短劇私域-快速引流變現

短劇的爆火&#xff0c;衍生出了很多周邊項目。 比如免費看劇App&#xff0c;短劇搜索機器人&#xff0c;短劇付費圈子等等。 這些項目的本質&#xff0c;就是借助短劇的熱度&#xff0c;把流量引到自己的魚塘進行變現。 短劇機器人大家都知道&#xff0c;目前最火的一種玩法…

【大數據面試題】27 講下Doris的物化視圖

一步一個腳印&#xff0c;一天一道面試題。 物化視圖概念 物化視圖&#xff0c;顧名思義&#xff0c;是將一個查詢的結果預先計算并存儲為物理表的形式。這意味著&#xff0c;原本需要在運行時動態執行的復雜查詢&#xff0c;現在變成了直接從已經計算好的結果表中讀取數據&a…

vue一個簡易時鐘

<template><div class"">時間{{ time }}<div class"base1"><div class"move-to-center line"></div><div class"move-to-center line line2"></div><div class"move-to-center lin…

單鏈表經典算法OJ題--牛客(環形鏈表的約瑟夫問題

鏈接&#xff1a;環形鏈表的約瑟夫問題_牛客題霸_牛客網【點擊即可跳轉】 著名的Josephus問題 據說著名猶太歷史學家 Josephus有過以下的故事&#xff1a; 在羅馬人占領喬塔帕特后&#xff0c;39 個猶太?與 Josephus及他的朋友躲到?個洞中&#xff0c;39個猶太?決定寧愿死也…

部標JT809開源(go版本)

GitHub - Yordroid/jt809_server: 部標809下級平臺&#xff0c;支持2011&#xff0c;2013,2019 歡迎大家給波星

網絡接口類型

第二天&#xff08;網絡、接口類型&#xff09; 網絡類型&#xff1a; 1、點到點&#xff1a;在一個網段內只能存在&#xff0c;兩個物理節點 MA --- 多路訪問 -- 在一個網段內物理節點的數量不限制 MA --- BMA NBMA 2、BMA --- 廣播型多路訪問 3、NBMA --- 非廣播型多路…

智能魚缸-設計說明書

設計摘要&#xff1a; 本論文以STC89C52單片機為核心控制器&#xff0c;構建了一套智能魚缸系統。該系統由中控部分、輸入部分和輸出部分組成。中控部分采用STC89C52單片機&#xff0c;負責獲取輸入部分數據并進行處理&#xff0c;控制輸出部分。輸入部分包括TDS水質水溫檢測模…

MySQL:查詢一個由逗號分隔的字符串數組,并檢查其中指定元素是否等于某個值

使用SUBSTRING_INDEX函數 SELECT * FROM TABLE_NAME WHERE SUBSTRING_INDEX(SUBSTRING_INDEX(status, ,, 2), ,, -1) 1SUBSTRING_INDEX()函數 用于提取字符串中的子字符串。函數有三個參數&#xff1a; 第一個參數是源字符串&#xff0c;這是您要從中提取子字符串的字符串。…

Axure RP移動端交互元件庫/交互原型模板

作品類型&#xff1a;元件庫/原型模板 更新日期&#xff1a;2023-12-04 當前版本&#xff1a;V1.3 適用范圍&#xff1a;App應用/小程序 Axure版本&#xff1a;Axure 9.0均可打開 文件大小&#xff1a;36.7M 歷時兩個月制作并整理了手機移動端常用的75種組件、90個常用界面模板…

Hadoop復習(上)

目錄 一 緒論 1 大數據5v特點 --1.6 2 Google三駕馬車 GFS MapReduce BigTable --1.18 3 Hadoop的特點 --1.23 4 Hadoop生態系統 (教材p6) 6 NoSQL有哪些 二 HDFS架構 1 三大基本組件 --2.1.2 2 HDFS特性和局限性(教材p38) --2.1.4-5 3 HDFS block 4 HDFS守護進程 …

設計模式六大原則之 接口分離原則

文章目錄 概念比較代碼示例優勢 小結 概念 要為各個類建立它們需要的專用接口&#xff0c;而不要試圖去建立一個很龐大的接口供所有依賴它的類去調用。 比較 概念有了&#xff0c;再來看看比較下吧&#xff0c;和單一職責比較比較。 接口隔離原則和單一職責都是為了提高類的…

pyenv 之 python 多版本管理(win11)

1. 背景 常常會用到Python的多個版本&#xff0c;因此可以使用Pyenv來對Python版本進行管理。 2. win11下載 pyenv 在終端執行下載語句&#xff1a; pip install pyenv-win --target D:\software\pyenv 其中 D:\software\pyenv 為你想要下載到的文件目錄&#xff0c;建議在 …

數字功放-改善液晶顯示屏音頻性能,重塑音頻體驗

隨著液晶電視、液晶顯示器以及等離子電視屏幕的尺寸不斷增大&#xff0c;音頻性能要求相應提高&#xff1b;數字功放芯片作為音頻解決方案&#xff1b;不僅為音頻設備帶來更高的效率和更低的功耗&#xff0c;同時在顯示屏上進一步提高了平板顯示器的音質&#xff0c;使之具有了…

常用正則 JS 持續更新

應用版本號正則驗證 正則判斷版本號&#xff08;如&#xff1a;1.2.3 或 1.2.3.4&#xff09;&#xff0c;不允許出現 0.x.x&#xff1b;01.x.x; x.0x.x; x.00.x&#xff1b; x.x.00; x.x.0x/ ^ ([ 1-9 ] \d | [ 1-9 ])( . ([ 1-9 ] \d | \d )) {2,3} $ /0-10 保留一位小數的數…

Git系列:git add 被忽視的操作技巧

&#x1f49d;&#x1f49d;&#x1f49d;歡迎蒞臨我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:「stormsha的主頁」…

[Linux]一篇文章帶你全面理解信號

文章目錄 初識信號一、什么是信號二、為什么要有信號 看見信號一、先見一下Linux中的信號&#xff1a;二、如何產生信號三、自定義信號的處理行為&#xff08;自定義捕捉&#xff09; 了解信號一、信號的保存二、block、pending表使用代碼查看三、一些倔強的&#xff0c;無法被…

排列三利用大數據預測

排列三是一種基于隨機數字生成的游戲&#xff0c;因此從純數學的角度來看&#xff0c;利用大數據進行預測并不能確保中獎。然而&#xff0c;大數據和數據分析確實可以為我們提供一些參考和指導&#xff0c;幫助我們在投注時做出更明智的決策。 首先&#xff0c;大數據可以幫助…

【Redis】Redis鍵值存儲

大家好&#xff0c;我是白晨&#xff0c;一個不是很能熬夜&#xff0c;但是也想日更的人。如果喜歡這篇文章&#xff0c;點個贊&#x1f44d;&#xff0c;關注一下&#x1f440;白晨吧&#xff01;你的支持就是我最大的動力&#xff01;&#x1f4aa;&#x1f4aa;&#x1f4aa…