Springboot中如何集成Druid
Springboot 集成Druid
Druid是Java語言中最好的數(shù)據(jù)庫連接池。Druid能夠提供強大的監(jiān)控和擴展功能。本篇主要講解一下 Springboot中如何集成 Druid !

1.添加Druid依賴
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>有不少教程建議的依賴是
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency>其實Druid和Springboot官方已經提供了很好的集成,雖然二者都可以使用,但是druid-spring-boot-starter不需要編寫配置類,簡化了配置。
2.添加配置application.yaml
spring:
datasource:
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai
type: com.alibaba.druid.pool.DruidDataSource
# 數(shù)據(jù)源連接池配置
druid:
# 數(shù)據(jù)源其他配置
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
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.logSlowSql=true;druid.stat.slowSqlMillis=1000;
# 配置監(jiān)控統(tǒng)計攔截的filters,去掉后監(jiān)控界面sql無法統(tǒng)計,'wall'用于防火墻
filters: stat,wall,slf4j
#配置監(jiān)控屬性: 在druid-starter的: com.alibaba.druid.spring.boot.autoconfigure.stat包下進行的邏輯配置
# WebStatFilter配置,
web-stat-filter:
#默認為false,表示不使用WebStatFilter配置,就是屬性名去短線
enabled: true
#攔截該項目下的一切請求
url-pattern: /*
#對這些請求放行
exclusions: /druid/*,*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico
session-stat-enable: true
principal-session-name: session_name
principal-cookie-name: cookie_name
# StatViewServlet配置
stat-view-servlet:
#默認為false,表示不使用StatViewServlet配置,就是屬性名去短線
enabled: true
#配置DruidStatViewServlet的訪問地址。后臺監(jiān)控頁面的訪問地址
url-pattern: /druid/*
#禁用HTML頁面上的“重置”功能,會把所有監(jiān)控的數(shù)據(jù)全部清空,一般不使用
reset-enable: false
#監(jiān)控頁面登錄的用戶名
login-username: admin
#監(jiān)控頁面登錄的密碼
login-password: 123456
#白名單
allow:
#黑名單
deny:
#Spring監(jiān)控配置,說明請參考Druid Github Wiki,配置_Druid和Spring關聯(lián)監(jiān)控配置
aop-patterns: com.zzp.*有幾個地方需要注意下:
- 想要在日志中輸出慢日志除了配置connectionProperties,還需要在filters屬性中加入項目使用的日志框架如log4j或者slf4j,并引入對應依賴,否則日志中不會輸出慢sql日志;
- 如果需要Spring監(jiān)控,除了配置aop-patterns,還需要加入spring-boot-starter-aop依賴,否則Spring監(jiān)控頁面空白。
3.查看監(jiān)控頁面
訪問http://ip:port/druid/login.html,輸入賬號密碼,如果數(shù)據(jù)源頁面各項參數(shù)和配置的參數(shù)一樣,則說明集成成功。

調用接口,查看SQL監(jiān)控和Spring監(jiān)控頁面是否正常顯示。
4.去除廣告
監(jiān)控頁面下方有阿里云的廣告,可以通過代碼去除。
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties;
import com.alibaba.druid.util.Utils;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.servlet.*;
import java.io.IOException;
/**
* Druid廣告配置
*
* @author zzp
*/
@Configuration
@ConditionalOnWebApplication
@AutoConfigureAfter(DruidDataSourceAutoConfigure.class)
@ConditionalOnProperty(
name = "spring.datasource.druid.stat-view-servlet.enabled",
havingValue = "true",
matchIfMissing = true)
public class DruidAdConfig {
/**
* 去除監(jiān)控頁面底部廣告
*
* @param properties
* @return org.springframework.boot.web.servlet.FilterRegistrationBean
*/
@Bean
public FilterRegistrationBean removeDruidAdFilterRegistrationBean(
DruidStatProperties properties) {
// 獲取web監(jiān)控頁面的參數(shù)
DruidStatProperties.StatViewServlet config = properties.getStatViewServlet();
// 提取common.js的配置路徑
String pattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*";
String commonJsPattern = pattern.replaceAll("\\*", "js/common.js");
final String filePath = "support/http/resources/js/common.js";
// 創(chuàng)建filter進行過濾
Filter filter =
new Filter() {
@Override
public void init(FilterConfig filterConfig) throws ServletException {}
@Override
public void doFilter(
ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
chain.doFilter(request, response);
// 重置緩沖區(qū),響應頭不會被重置
response.resetBuffer();
// 獲取common.js
String text = Utils.readFromResource(filePath);
// 正則替換banner, 除去底部的廣告信息
text = text.replaceAll("<a.*?banner\"></a><br/>", "");
text = text.replaceAll("powered.*?shrek.wang</a>", "");
response.getWriter().write(text);
}
@Override
public void destroy() {}
};
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(filter);
registrationBean.addUrlPatterns(commonJsPattern);
return registrationBean;
}
}完結!
到此這篇關于Springboot 集成Druid的文章就介紹到這了,更多相關Springboot 集成Druid內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java之通過OutputStream寫入文件與文件復制問題
這篇文章主要介紹了Java之通過OutputStream寫入文件與文件復制問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04
一場由Java中Integer引發(fā)的踩坑實戰(zhàn)
Java中的數(shù)據(jù)類型分為基本數(shù)據(jù)類型和復雜數(shù)據(jù)類型int是前者而integer是后者(也就是一個類),下面這篇文章主要給大家介紹了關于由Java中Integer引發(fā)的踩坑實戰(zhàn),需要的朋友可以參考下2022-11-11
SpringBoot接收數(shù)組參數(shù)和集合參數(shù)方式
這篇文章主要介紹了SpringBoot接收數(shù)組參數(shù)和集合參數(shù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-03-03
Spring @Async無法實現(xiàn)異步的解決方案
這篇文章主要介紹了Spring @Async無法實現(xiàn)異步的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10
Java+Ajax實現(xiàn)的用戶名重復檢驗功能實例詳解
這篇文章主要介紹了Java+Ajax實現(xiàn)的用戶名重復檢驗功能,結合實例形式詳細分析了java針對用戶名提交的ajax數(shù)據(jù)庫查詢與重復檢查功能相關實現(xiàn)技巧與操作注意事項,需要的朋友可以參考下2018-12-12

