javascript
SpringBoot自定义数据源DruidDataSource
強烈建議看原文,排版清晰明了:https://blog.csdn.net/wangmx1993328/article/details/81865153?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
?
DRUID 簡介
Druid 是阿里巴巴開源平臺上一個數據庫連接池實現,結合了 C3P0、DBCP、PROXOOL 等 DB 池的優點,同時加入了日志監控
Druid 可以很好的監控 DB 池連接和 SQL 的執行情況,天生就是針對監控而生的 DB 連接池
《Spring Boot 默認數據源 HikariDataSource 與 JdbcTemplate》中已經介紹 Spring Boot 2.0 以上默認使用?Hikari?數據源,可以說 Hikari 與 Driud 都是當前 Java Web 上最優秀的數據源
本文承接《Spring Boot 默認數據源 HikariDataSource 與 JdbcTemplate》,重點介紹 Spring Boot 如何集成 Druid 數據源,如何實現數據庫監控
配置參數
com.alibaba.druid.pool.DruidDataSource 基本配置參數如下:
配置?? ?缺省值?? ?說明
name?? ???? ?配置這個屬性的意義在于,如果存在多個數據源,監控的時候可以通過名字來區分開來。?
如果沒有配置,將會生成一個名字,格式是:"DataSource-" + System.identityHashCode(this)
jdbcUrl?? ???? ?連接數據庫的url,不同數據庫不一樣。例如:?
mysql : jdbc:mysql://10.20.153.104:3306/druid2?
oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto
username?? ???? ?連接數據庫的用戶名
password?? ???? ?連接數據庫的密碼。如果你不希望密碼直接寫在配置文件中,可以使用ConfigFilter。詳細看這里:https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter
driverClassName?? ?根據url自動識別?? ?這一項可配可不配,如果不配置druid會根據url自動識別dbType,然后選擇相應的driverClassName(建議配置下)
initialSize?? ?0?? ?初始化時建立物理連接的個數。初始化發生在顯示調用init方法,或者第一次getConnection時
maxActive?? ?8?? ?最大連接池數量
maxIdle?? ?8?? ?已經不再使用,配置了也沒效果
minIdle?? ???? ?最小連接池數量
maxWait?? ???? ?獲取連接時最大等待時間,單位毫秒。配置了maxWait之后,缺省啟用公平鎖,并發效率會有所下降,如果需要可以通過配置useUnfairLock屬性為true使用非公平鎖。
poolPreparedStatements?? ?false?? ?是否緩存preparedStatement,也就是PSCache。PSCache對支持游標的數據庫性能提升巨大,比如說oracle。在mysql下建議關閉。
maxOpenPreparedStatements?? ?-1?? ?要啟用PSCache,必須配置大于0,當大于0時,poolPreparedStatements自動觸發修改為true。在Druid中,不會存在Oracle下PSCache占用內存過多的問題,可以把這個數值配置大一些,比如說100
validationQuery?? ???? ?用來檢測連接是否有效的sql,要求是一個查詢語句。如果validationQuery為null,testOnBorrow、testOnReturn、testWhileIdle都不會其作用。
testOnBorrow?? ?true?? ?申請連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能。
testOnReturn?? ?false?? ?歸還連接時執行validationQuery檢測連接是否有效,做了這個配置會降低性能
testWhileIdle?? ?false?? ?建議配置為true,不影響性能,并且保證安全性。申請連接的時候檢測,如果空閑時間大于timeBetweenEvictionRunsMillis,執行validationQuery檢測連接是否有效。
timeBetweenEvictionRunsMillis?? ???? ?有兩個含義:?
1) Destroy線程會檢測連接的間隔時間2) testWhileIdle的判斷依據,詳細看testWhileIdle屬性的說明
numTestsPerEvictionRun?? ???? ?不再使用,一個DruidDataSource只支持一個EvictionRun
minEvictableIdleTimeMillis?? ???? ??
connectionInitSqls?? ???? ?物理連接初始化的時候執行的sql
exceptionSorter?? ?根據dbType自動識別?? ?當數據庫拋出一些不可恢復的異常時,拋棄連接
filters?? ???? ?屬性類型是字符串,通過別名的方式配置擴展插件,常用的插件有:?
監控統計用的filter:stat日志用的filter:log4j防御sql注入的filter:wall
proxyFilters?? ???? ?
類型是List<com.alibaba.druid.filter.Filter>,如果同時配置了filters和proxyFilters,是組合關系,并非替換關系
自定義數據源 Druid
引入數據源
第一步需要在應用的 pom.xml 文件中添加上 Druid 數據源依賴,而這個依賴可以從 Maven 倉庫官網?Maven Repository?中獲取
進入之后就可以選擇需要的版本然后賦值進 pom.xml 文件中即可
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
? ? <modelVersion>4.0.0</modelVersion>
?
? ? <groupId>www.wmx.com.horse</groupId>
? ? <artifactId>horse</artifactId>
? ? <version>0.0.1-SNAPSHOT</version>
? ? <packaging>jar</packaging>
?
? ? <name>horse</name>
? ? <description>Demo project for Spring Boot</description>
?
? ? <parent>
? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? <artifactId>spring-boot-starter-parent</artifactId>
? ? ? ? <version>2.0.4.RELEASE</version>
? ? ? ? <relativePath/>
? ? ? ? <!-- lookup parent from repository -->
? ? </parent>
?
? ? <properties>
? ? ? ? <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
? ? ? ? <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
? ? ? ? <java.version>1.8</java.version>
? ? </properties>
?
? ? <dependencies>
? ? ? ? <!-- 引入Spring封裝的jdbc-->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? ? ? <artifactId>spring-boot-starter-jdbc</artifactId>
? ? ? ? </dependency>
?
? ? ? ? <!-- 引入html模板引擎Thymeleaf-->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? ? ? <artifactId>spring-boot-starter-thymeleaf</artifactId>
? ? ? ? </dependency>
?
? ? ? ? <!-- 因為web項目啟動模塊-->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? ? ? <artifactId>spring-boot-starter-web</artifactId>
? ? ? ? </dependency>
?
? ? ? ? <!-- 引入mysql數據庫連接驅動-->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>mysql</groupId>
? ? ? ? ? ? <artifactId>mysql-connector-java</artifactId>
? ? ? ? ? ? <scope>runtime</scope>
? ? ? ? </dependency>
?
? ? ? ? <!-- 引入 Druid 數據源依賴:https://mvnrepository.com/artifact/com.alibaba/druid -->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>com.alibaba</groupId>
? ? ? ? ? ? <artifactId>druid</artifactId>
? ? ? ? ? ? <version>1.1.9</version>
? ? ? ? </dependency>
?
? ? ? ? <!-- 引入Spring Boot 測試模塊-->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? ? ? <artifactId>spring-boot-starter-test</artifactId>
? ? ? ? ? ? <scope>test</scope>
? ? ? ? </dependency>
? ? </dependencies>
?
? ? <build>
? ? ? ? <plugins>
? ? ? ? ? ? <!-- Spring Boot 打包插件-->
? ? ? ? ? ? <plugin>
? ? ? ? ? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? ? ? ? ? <artifactId>spring-boot-maven-plugin</artifactId>
? ? ? ? ? ? </plugin>
? ? ? ? </plugins>
? ? </build>
?
</project>
切換 Druid 數據源
《Spring Boot 默認數據源 HikariDataSource 與 JdbcTemplate》中已經說過 Spring Boot 2.0 以上默認使用?com.zaxxer.hikari.HikariDataSource?數據源
但可以 通過 spring.datasource.type 指定數據源,可以從?Spring Boot 官方文檔?查看
spring.datasource.type= # Fully qualified name of the connection pool implementation to use. By default, it is auto-detected from the classpath.
spring:
? datasource:
? ? username: root
? ? password: root
? ? url: jdbc:mysql://192.168.58.129:3307/horse?characterEncoding=UTF-8
? ? driver-class-name: com.mysql.jdbc.Driver
? ? type: com.alibaba.druid.pool.DruidDataSource
數據源切換之后,同理可以注入?DataSource,然后獲取到它,輸出一看便知是否成功切換
package com.lct.www;
?
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
?
import javax.annotation.Resource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
?
@RunWith(SpringRunner.class)
@SpringBootTest
public class HorseApplicationTests {
?
? ? /**
? ? ?* Spring Boot 默認已經配置好了數據源,程序員可以直接 DI 注入然后使用即可
? ? ?*/
? ? @Resource
? ? DataSource dataSource;
?
? ? @Test
? ? public void contextLoads() throws SQLException {
?
? ? ? ? System.out.println("數據源>>>>>>" + dataSource.getClass());
? ? ? ? Connection connection = dataSource.getConnection();
?
? ? ? ? System.out.println("連接>>>>>>>>>" + connection);
? ? ? ? System.out.println("連接地址>>>>>" + connection.getMetaData().getURL());
? ? ? ? connection.close();
? ? }
}
如下所示 數據源切換成功,Druid 數據源切換成功之后,便是要考慮設置它的參數,就如同以前 c3p0、dbcp 一樣需要設置數據源連接初始化大小、最大連接數、等待時間、最小連接數、以及數據庫監控 等等。
2018-08-20 08:54:08.276 ?INFO 8128 --- [ ??????????main] com.lct.www.HorseApplicationTests ???????: Started HorseApplicationTests in 3.181 seconds (JVM running for 4.892)
數據源>>>>>>class com.alibaba.druid.pool.DruidDataSource
2018-08-20 08:54:08.523 ?INFO 8128 --- [ ??????????main] com.alibaba.druid.pool.DruidDataSource ??: {dataSource-1} inited
連接>>>>>>>>>com.mysql.jdbc.JDBC4Connection@7026b7ee
連接地址>>>>>jdbc:mysql://192.168.58.129:3307/horse?characterEncoding=UTF-8
2018-08-20 08:54:08.897 ?INFO 8128 --- [ ??????Thread-2] o.s.w.c.s.GenericWebApplicationContext ??: Closing org.springframework.web.context.support.GenericWebApplicationContext@7e990ed7: startup date [Mon Aug 20 08:54:05 CST 2018]; root of context hierarchy
2018-08-20 08:54:08.904 ?INFO 8128 --- [ ??????Thread-2] com.alibaba.druid.pool.DruidDataSource ??: {dataSource-1} closed
Process finished with exit code 0
配置 Druid 數據源參數
如同以前 c3p0、dbcp 數據源可以設置數據源連接初始化大小、最大連接數、等待時間、最小連接數 等一樣,Druid 數據源同理可以進行設置
Druid 數據源參數配置在全局配置文件中即可,如下所示:
spring:
? datasource:
? ? username: root
? ? password: root
? ? url: jdbc:mysql://192.168.58.129:3307/horse?characterEncoding=UTF-8
? ? driver-class-name: com.mysql.jdbc.Driver
? ? type: com.alibaba.druid.pool.DruidDataSource
?
#上半區公共部分對應的是 org.springframework.boot.autoconfigure.jdbc.DataSourceProperties 中的屬性
?
#下半區屬性對應的是 com.alibaba.druid.pool.DruidDataSource 中的屬性,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
下半區 Druid 數據源的專有屬性對應的是 com.alibaba.druid.pool.DruidDataSource 中的屬性,雖然切換為 Druid 數據源之后,Spring Boot 會自動生成 DruidDataSource 并放入容器中供程序員使用,但是它并不會自動綁定配置文件的參
所以需要程序員自己為 com.alibaba.druid.pool.DruidDataSource?綁定全局配置文件中的參數,再添加到容器中,而不再使用 Spring Boot 的自動生成了
如下所示,自己添加?DruidDataSource 組件到容器中,并綁定屬性:
package com.lct.www.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;
?
/**
?* Created by Administrator on 2018/8/20 0020.
?* Druid 數據源配置類
?*/
@Configuration
public class DruidConfig {
?
? ? /**
? ? ?* 將自定義的 Druid 數據源添加到容器中,不再讓 Spring Boot 自動創建
? ? ?* 這樣做的目的是:綁定全局配置文件中的 druid 數據源屬性到 com.alibaba.druid.pool.DruidDataSource
? ? ?* 從而讓它們生效
? ? ?* @ConfigurationProperties(prefix = "spring.datasource"):作用就是將 全局配置文件中 前綴為 spring.datasource
? ? ?* 的屬性值注入到 com.alibaba.druid.pool.DruidDataSource 的同名參數中
? ? ?*
? ? ?* @return
? ? ?*/
? ? @ConfigurationProperties(prefix = "spring.datasource")
? ? @Bean
? ? public DataSource druidDataSource() {
? ? ? ? return new DruidDataSource();
? ? }
}
對于?@ConfigurationProperties 綁定配置文件參數不熟悉時,可以參考《Spring Boot 全局配置文件》
現在可以獲取容器中的 DataSource 轉為 DruidDataSource ,然后取值看配置文件中的參數是否已經生效,也可以直接 Debug。
package com.lct.www;
?
import com.alibaba.druid.pool.DruidDataSource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
?
import javax.annotation.Resource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
?
@RunWith(SpringRunner.class)
@SpringBootTest
public class HorseApplicationTests {
?
? ? /**
? ? ?* Spring Boot 默認已經配置好了數據源,程序員可以直接 DI 注入然后使用即可
? ? ?*/
? ? @Resource
? ? DataSource dataSource;
?
? ? @Test
? ? public void contextLoads() throws SQLException {
?
? ? ? ? System.out.println("數據源>>>>>>" + dataSource.getClass());
? ? ? ? Connection connection = dataSource.getConnection();
?
? ? ? ? System.out.println("連接>>>>>>>>>" + connection);
? ? ? ? System.out.println("連接地址>>>>>" + connection.getMetaData().getURL());
?
? ? ? ? DruidDataSource druidDataSource = (DruidDataSource) dataSource;
? ? ? ? System.out.println("druidDataSource 數據源最大連接數:" + druidDataSource.getMaxActive());
? ? ? ? System.out.println("druidDataSource 數據源初始化連接數:" + druidDataSource.getInitialSize());
?
? ? ? ? connection.close();
? ? }
}
控制臺輸出如下,可見配置參數已經生效:
2018-08-20 10:21:48.498 ?INFO 18284 --- [ ??????????main] com.lct.www.HorseApplicationTests ???????: Started HorseApplicationTests in 3.494 seconds (JVM running for 4.763)
數據源>>>>>>class com.alibaba.druid.pool.DruidDataSource
log4j:WARN No appenders could be found for logger (druid.sql.Connection).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
2018-08-20 10:21:48.921 ?INFO 18284 --- [ ??????????main] com.alibaba.druid.pool.DruidDataSource ??: {dataSource-1} inited
連接>>>>>>>>>com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@37d871c2
連接地址>>>>>jdbc:mysql://192.168.58.129:3307/horse?characterEncoding=UTF-8
druidDataSource 數據源最大連接數:20
druidDataSource 數據源初始化連接數:5
2018-08-20 10:21:48.936 ?INFO 18284 --- [ ??????Thread-2] o.s.w.c.s.GenericWebApplicationContext ??: Closing org.springframework.web.context.support.GenericWebApplicationContext@58e1d9d: startup date [Mon Aug 20 10:21:45 CST 2018]; root of context hierarchy
2018-08-20 10:21:48.948 ?INFO 18284 --- [ ??????Thread-2] com.alibaba.druid.pool.DruidDataSource ??: {dataSource-1} closed
Process finished with exit code 0
配置 Druid 數據源監控
配置一個 web 監控的 filter,因為使用的是內置 Servlet 容器,所以可以參考《?Web 項目 tiger 之13 注冊 Servlet 三大組件之 Filter》
配置 Druid 后臺管理 Servlet
Druid 數據源具有監控的功能,并提供了一個 web 界面方便用戶查看,類似安裝 路由器 時,人家也提供了一個默認的 web 頁面。
所以第一步需要設置?Druid 的后臺管理頁面,比如 登錄賬號、密碼 等
配置一個管理后臺的 Servlet,因為使用的是內置 Servlet 容器,所以可以參考《?Web 項目 tiger 之12 注冊 Servlet 三大組件之 Servlet》
package com.lct.www.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;
?
/**
?* Created by Administrator on 2018/8/20 0020.
?* Druid 數據源配置類
?*/
@Configuration
public class DruidConfig {
?
? ? /**
? ? ?* 將自定義的 Druid 數據源添加到容器中,不再讓 Spring Boot 自動創建
? ? ?* 這樣做的目的是:綁定全局配置文件中的 druid 數據源屬性到 com.alibaba.druid.pool.DruidDataSource
? ? ?* 從而讓它們生效
? ? ?*
? ? ?* @return
? ? ?* @ConfigurationProperties(prefix = "spring.datasource"):作用就是將 全局配置文件中 前綴為 spring.datasource
? ? ?* 的屬性值注入到 com.alibaba.druid.pool.DruidDataSource 的同名參數中
? ? ?*/
? ? @ConfigurationProperties(prefix = "spring.datasource")
? ? @Bean
? ? public DataSource druidDataSource() {
? ? ? ? return new DruidDataSource();
? ? }
?
? ? /**
? ? ?* 配置 Druid 監控 之 ?管理后臺的 Servlet
? ? ?* 內置 Servler 容器時沒有web.xml 文件,所以使用 Spring Boot 的注冊 Servlet 方式
? ? ?*/
? ? @Bean
? ? public ServletRegistrationBean statViewServlet() {
? ? ? ? ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(),
? ? ? ? ? ? ? ? "/druid/*");
?
? ? ? ? /**
? ? ? ? ?* loginUsername:Druid 后臺管理界面的登錄賬號
? ? ? ? ?* loginPassword:Druid 后臺管理界面的登錄密碼
? ? ? ? ?* allow:Druid 后臺允許誰可以訪問
? ? ? ? ?* ? ? ?initParams.put("allow", "localhost"):表示只有本機可以訪問
? ? ? ? ?* ? ? ?initParams.put("allow", ""):為空或者為null時,表示允許所有訪問
? ? ? ? ?* deny:Druid 后臺拒絕誰訪問
? ? ? ? ?* ? ? ?initParams.put("deny", "192.168.1.20");表示禁止此ip訪問
? ? ? ? ?*/
? ? ? ? Map<String, String> initParams = new HashMap<>();
? ? ? ? initParams.put("loginUsername", "admin");
? ? ? ? initParams.put("loginPassword", "123456");
? ? ? ? initParams.put("allow", "");
? ? ? ? /*initParams.put("deny", "192.168.1.20");*/
?
? ? ? ? /** 設置初始化參數*/
? ? ? ? bean.setInitParameters(initParams);
? ? ? ? return bean;
? ? }
?
}
這些參數可以在?com.alibaba.druid.support.http.StatViewServlet 的父類?com.alibaba.druid.support.http.ResourceServlet 中找到
運行應用,測試結果
配置 Druid web 監控 filter
這個過濾器的作用就是統計 web 應用請求中所有的數據庫信息,比如 發出的 sql 語句,sql 執行的時間、請求次數、請求的 url 地址、以及seesion 監控、數據庫表的訪問次數 等等。
package com.lct.www.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;
?
/**
?* Created by Administrator on 2018/8/20 0020.
?* Druid 數據源配置類
?*/
@Configuration
public class DruidConfig {
?
? ? /**
? ? ?* 將自定義的 Druid 數據源添加到容器中,不再讓 Spring Boot 自動創建
? ? ?* 這樣做的目的是:綁定全局配置文件中的 druid 數據源屬性到 com.alibaba.druid.pool.DruidDataSource
? ? ?* 從而讓它們生效
? ? ?*
? ? ?* @return
? ? ?* @ConfigurationProperties(prefix = "spring.datasource"):作用就是將 全局配置文件中 前綴為 spring.datasource
? ? ?* 的屬性值注入到 com.alibaba.druid.pool.DruidDataSource 的同名參數中
? ? ?*/
? ? @ConfigurationProperties(prefix = "spring.datasource")
? ? @Bean
? ? public DataSource druidDataSource() {
? ? ? ? return new DruidDataSource();
? ? }
?
? ? /**
? ? ?* 配置 Druid 監控 之 ?管理后臺的 Servlet
? ? ?* 內置 Servler 容器時沒有web.xml 文件,所以使用 Spring Boot 的注冊 Servlet 方式
? ? ?*/
? ? @Bean
? ? public ServletRegistrationBean statViewServlet() {
? ? ? ? ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(),
? ? ? ? ? ? ? ? "/druid/*");
?
? ? ? ? /**
? ? ? ? ?* loginUsername:Druid 后臺管理界面的登錄賬號
? ? ? ? ?* loginPassword:Druid 后臺管理界面的登錄密碼
? ? ? ? ?* allow:Druid 后臺允許誰可以訪問
? ? ? ? ?* ? ? ?initParams.put("allow", "localhost"):表示只有本機可以訪問
? ? ? ? ?* ? ? ?initParams.put("allow", ""):為空或者為null時,表示允許所有訪問
? ? ? ? ?* deny:Druid 后臺拒絕誰訪問
? ? ? ? ?* ? ? ?initParams.put("deny", "192.168.1.20");表示禁止此ip訪問
? ? ? ? ?*/
? ? ? ? Map<String, String> initParams = new HashMap<>();
? ? ? ? initParams.put("loginUsername", "admin");
? ? ? ? initParams.put("loginPassword", "123456");
? ? ? ? initParams.put("allow", "");
? ? ? ? /*initParams.put("deny", "192.168.1.20");*/
?
? ? ? ? /** 設置初始化參數*/
? ? ? ? bean.setInitParameters(initParams);
? ? ? ? return bean;
? ? }
?
? ? /**
? ? ?* 配置 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/*");
? ? ? ? bean.setInitParameters(initParams);
? ? ? ??
? ? ? ? /** "/*" 表示過濾所有請求*/
? ? ? ? bean.setUrlPatterns(Arrays.asList("/*"));
? ? ? ? return bean;
? ? }
}
運行應用,可以往后臺發一些請求,同時進行一些 數據庫 sql 操作,測試結果效果如下:
?
?
---------------------?
轉載自:https://blog.csdn.net/wangmx1993328/article/details/81865153?
總結
以上是生活随笔為你收集整理的SpringBoot自定义数据源DruidDataSource的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 繁简转换纪要
- 下一篇: (转)2019年给Java编程初学者的建