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官方已經(jīng)提供了很好的集成,雖然二者都可以使用,但是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: #默認(rèn)為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: #默認(rèn)為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關(guān)聯(lián)監(jiān)控配置 aop-patterns: com.zzp.*
有幾個地方需要注意下:
- 想要在日志中輸出慢日志除了配置connectionProperties,還需要在filters屬性中加入項目使用的日志框架如log4j或者slf4j,并引入對應(yīng)依賴,否則日志中不會輸出慢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ù)一樣,則說明集成成功。
調(diào)用接口,查看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ū),響應(yīng)頭不會被重置 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; } }
完結(jié)!
到此這篇關(guān)于Springboot 集成Druid的文章就介紹到這了,更多相關(guān)Springboot 集成Druid內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java之通過OutputStream寫入文件與文件復(fù)制問題
這篇文章主要介紹了Java之通過OutputStream寫入文件與文件復(fù)制問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04一場由Java中Integer引發(fā)的踩坑實戰(zhàn)
Java中的數(shù)據(jù)類型分為基本數(shù)據(jù)類型和復(fù)雜數(shù)據(jù)類型int是前者而integer是后者(也就是一個類),下面這篇文章主要給大家介紹了關(guān)于由Java中Integer引發(fā)的踩坑實戰(zhàn),需要的朋友可以參考下2022-11-11SpringBoot接收數(shù)組參數(shù)和集合參數(shù)方式
這篇文章主要介紹了SpringBoot接收數(shù)組參數(shù)和集合參數(shù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-03-03Spring @Async無法實現(xiàn)異步的解決方案
這篇文章主要介紹了Spring @Async無法實現(xiàn)異步的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10Java+Ajax實現(xiàn)的用戶名重復(fù)檢驗功能實例詳解
這篇文章主要介紹了Java+Ajax實現(xiàn)的用戶名重復(fù)檢驗功能,結(jié)合實例形式詳細(xì)分析了java針對用戶名提交的ajax數(shù)據(jù)庫查詢與重復(fù)檢查功能相關(guān)實現(xiàn)技巧與操作注意事項,需要的朋友可以參考下2018-12-12