springboot系列學習(十九):springboot專案整合Druid,Druid到底是什麼,他是在專案中如何使用的
Druid總結就是一個資料庫的連線池,就是這個池子裡面有很多的資料庫的連結的物件,我們可以從這個池子裡面拿出一個物件進行運算元據庫,不用了放到這個池子裡面。Druid就是一個池子。
Druid 是阿里巴巴開源平臺上一個資料庫連線池實現,結合了 C3P0、DBCP 等 DB 池的優點,同時加入了日誌監控。
之前我們匯入jdbc的依賴之後,在yml配置檔案裡面加資料來源,之後就可以使用jdbc運算元據庫了。現在變了,我們從頭開始說這個Druid在springboot專案裡面如何使用
先看一下之前的整合的jdbc使用的資料來源是什麼
匯入jdbc之後,之前的yml裡面是這樣寫
之後我們就可以在測試類裡面,輸出這樣配置之後的資料來源是什麼,在測試類裡面的程式碼是
執行這個測試類之後,輸出的資料來源是
大家記住這個資料來源的型別,我們之後看看配置了Druid之後輸出的是什麼
建立一個springboot專案,匯入Druid依賴
在yml裡面的配置加一句Druid的配置
我們重新執行測試類,看看輸出的是什麼
看,資料來源已經變為了Druid了,之後運算元據庫就是這個資料來源了。
切換成功!既然切換成功,就可以設定資料來源連線初始化大小、最大連線數、等待時間、最小連線數 等設定項;可以檢視原始碼
既然已經切換成功,那麼我們就可以配置Druid自己的配置了,這個也是在yml裡面配置,具體可以配置哪些?一起看看吧
#Spring Boot 預設是不注入這些屬性值的,需要自己繫結
#druid 資料來源專有配置
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
#配置監控統計攔截的filters,stat:監控統計、log4j:日誌記錄、wall:防禦sql注入
#如果允許時報錯 java.lang.ClassNotFoundException: org.apache.log4j.Priority
#則匯入 log4j 依賴即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
這些配置裡面,最牛的地方是這些配置
#配置監控統計攔截的filters,stat:監控統計、log4j:日誌記錄、wall:防禦sql注入
#如果允許時報錯 java.lang.ClassNotFoundException: org.apache.log4j.Priority
#則匯入 log4j 依賴即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
因為有監控log4j,所以我們先匯入他的依賴
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
之後啟動專案,其實這個時候我們看不出來和之前的有什麼區別,因為資料來源是底層的,換一個底層,表面的工作還是增刪改查,我們察覺不到,現在我們要自己看到有什麼區別,所以想辦法看到區別,怎麼看?
1 寫一個Druid的配置類,並且讓這個配置類和yml裡面配置的Druid相關的東西繫結,這樣就可以在配置類裡面使用yml裡面的東西了。
yml檔案和配置類繫結,這個之前就寫過
@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")
@Bean
public DataSource druidDataSource() {
return new DruidDataSource();
}
}
解釋以上的配置類的作用:
不管匯入什麼依賴,都會有一個配置類,這個是在原始碼裡面,但是現在我們不想要這個原始碼裡面的配置類了,我們想自定義,所以我們要自己寫,自己寫的格式還要和原始碼裡面的一樣。以前我們自己寫一個yml檔案,裡面配置一下,之後專案啟動的時候,yml裡面的值會自動的賦值到原始碼裡面的配置類裡面。現在我們自定義了配置類,所以要求專案一啟動,yml裡面的配置的值要自動的賦值到我們自定義的配置類上面,而不是原始碼裡面的配置類,所以現在的自定義的配置類就是以上的寫法,記住就可以,因為原始碼裡面的格式也是那樣的。
Druid 資料來源具有監控的功能,並提供了一個 web 介面方便使用者檢視,類似安裝 路由器 時,人家也提供了一個預設的 web 頁面。
我們咋看到這個頁面,咋使用這個監控功能,如下:
在配置類裡面寫如下的程式碼
//配置 Druid 監控管理後臺的Servlet;
//內建 Servlet 容器時沒有web.xml檔案,所以使用 Spring Boot 的註冊 Servlet 方式
@Bean
public ServletRegistrationBean statViewServlet() {
ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
// 這些引數可以在 com.alibaba.druid.support.http.StatViewServlet
// 的父類 com.alibaba.druid.support.http.ResourceServlet 中找到
Map<String, String> initParams = new HashMap<>();
initParams.put("loginUsername", "admin"); //後臺管理介面的登入賬號
initParams.put("loginPassword", "123456"); //後臺管理介面的登入密碼
//後臺允許誰可以訪問
//initParams.put("allow", "localhost"):表示只有本機可以訪問
//initParams.put("allow", ""):為空或者為null時,表示允許所有訪問
initParams.put("allow", "");
//deny:Druid 後臺拒絕誰訪問
//initParams.put("jing", "192.168.1.20");表示禁止此ip訪問
//設定初始化引數
bean.setInitParameters(initParams);
return bean;
}
這個監控的頁面是人家已經寫好的,拿來就可以使用,你只需要在你的專案裡面配置以上的程式碼之後,這個配置類裡面的程式碼是死的,你不需要記住,拿來用就可以,之後執行專案,根據指定的路徑訪問這個頁面就可以了。
以後專案裡面執行了什麼sql語句,這個控制頁面上面就會記錄,我們登入後就會看到這個專案裡面執行過上面sql語句
Druid的過濾器
也就是我們配置了這個,這個裡面的東西就不會在監控裡面看見,也就是不監控這些東西了
//配置 Druid 監控 之 web 監控的 filter
//WebStatFilter:用於配置Web和Druid資料來源之間的管理關聯監控統計
@Bean
public FilterRegistrationBean webStatFilter() {
FilterRegistrationBean bean = new FilterRegistrationBean();
bean.setFilter(new WebStatFilter());
//exclusions:設定哪些請求進行過濾排除掉,從而不進行統計
Map<String, String> initParams = new HashMap<>();
initParams.put("exclusions", "*.js,*.css,/druid/*,/jdbc/*");
bean.setInitParameters(initParams);
//"/*" 表示過濾所有請求
bean.setUrlPatterns(Arrays.asList("/*"));
return bean;
}
相關文章
- SpringBoot專案整合阿里Druid連線池Spring Boot阿里UI
- Springboot專案引入druid安裝部署使用Spring BootUI
- springboot專案整合druid資料庫連線池Spring BootUI資料庫
- springboot整合druidSpring BootUI
- 【springboot】學習4:整合JDBC、整合druid、整合mybatis、整合 SpringSecuritySpring BootJDBCUIMyBatisGse
- SpringBoot整合Mybatis+DruidSpring BootMyBatisUI
- springboot activiti 整合專案框架原始碼 shiro 安全框架 druid 資料庫連線池Spring Boot框架原始碼UI資料庫
- SpringBoot整合Druid資料來源Spring BootUI
- springboot整合Druid資料來源[springboot8]Spring BootUI
- SpringBoot專案整合MinIOSpring Boot
- springboot專案整合mybatisSpring BootMyBatis
- SpringBoot專案整合RabbitMQSpring BootMQ
- SpringBoot3.x使用DruidSpring BootUI
- SpringBoot整合阿里巴巴Druid監控Spring Boot阿里UI
- SpringBoot專案整合日誌Spring Boot
- SpringBoot 整合多資料來源(MyBatis + Druid)Spring BootMyBatisUI
- Vue專案釋出到springboot中的系列配置VueSpring Boot
- SpringBoot_1_integrate_DruidSpring BootUI
- Springboot 整合阿里資料庫連線池 druidSpring Boot阿里資料庫UI
- MyBatis初級實戰之三:springboot整合druidMyBatisSpring BootUI
- 如何刪除springboot中的子專案Spring Boot
- Spring Data JPA系列2:SpringBoot整合JPA詳細教程,快速在專案中熟練使用JPASpring Boot
- springboot專案中yaml檔案Spring BootYAML
- springboot之Druid連線池講解+mybatis整合+PageHelper整合Spring BootUIMyBatis
- SpringBoot專案在Eclipse/MyEclipse中執行Spring BootEclipse
- Springboot專案中需整合的依賴集和檔案配置Spring Boot
- Springboot2+vue2整合專案Spring BootVue
- SpringBoot + Mybatis + Redis 整合入門專案Spring BootMyBatisRedis
- _005_SpringBoot_使用IDEA建立SpringBoot專案Spring BootIdea
- Springboot專案中使用KafkaSpring BootKafka
- 使用IDEA建立springboot專案IdeaSpring Boot
- 使用SpringBoot搭建Web專案Spring BootWeb
- springboot+vue專案如何整合企業微信Spring BootVue
- springboot專案中整合ip2region包 FileNotFoundExceptionSpring BootException
- Druid資料來源使用(一)---單獨使用與整合springboot+mybatisUISpring BootMyBatis
- SpringBoot系列(十五)整合快取,專案會用得到的技術Spring Boot快取
- SpringBoot專案搭建Spring Boot
- SpringBoot3整合Druid資料來源的解決方案Spring BootUI