您好,登錄后才能下訂單哦!
小編給大家分享一下springboot項目中如何實現訪問druid內置監控頁面,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.9</version> </dependency>
# 數據庫訪問配置 # 主數據源,默認的 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=123456 # 下面為連接池的補充設置,應用到上面所有數據源中 # 初始化大小,最小,最大 spring.datasource.initialSize=5 spring.datasource.minIdle=5 spring.datasource.maxActive=20 # 配置獲取連接等待超時的時間 spring.datasource.maxWait=60000 # 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 spring.datasource.timeBetweenEvictionRunsMillis=60000 # 配置一個連接在池中最小生存的時間,單位是毫秒 spring.datasource.minEvictableIdleTimeMillis=300000 spring.datasource.validationQuery=SELECT 1 FROM DUAL spring.datasource.testWhileIdle=true spring.datasource.testOnBorrow=false spring.datasource.testOnReturn=false # 打開PSCache,并且指定每個連接上PSCache的大小 spring.datasource.poolPreparedStatements=true spring.datasource.maxPoolPreparedStatementPerConnectionSize=20 # 配置監控統計攔截的filters,去掉后監控界面sql無法統計,'wall'用于防火墻 spring.datasource.filters=stat,wall,log4j # 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄 spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 # 合并多個DruidDataSource的監控數據 #spring.datasource.useGlobalDataSourceStat=true
訪問頁面http://127.0.0.1:8001/druid/sql.html,就可以訪問監控頁面了,其中ip和端口號為項目的ip和端口號。
頁面效果如下:
只需要在springboot啟動類中加入@bean配置即可:
@Bean public ServletRegistrationBean<StatViewServlet> druidStatViewServlet() { ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*"); registrationBean.addInitParameter("allow", "127.0.0.1");// IP白名單 (沒有配置或者為空,則允許所有訪問) registrationBean.addInitParameter("deny", "");// IP黑名單 (存在共同時,deny優先于allow) registrationBean.addInitParameter("loginUsername", "root"); registrationBean.addInitParameter("loginPassword", "1234"); registrationBean.addInitParameter("resetEnable", "false"); return registrationBean; }
Druid是由阿里巴巴團隊開發的,能夠提供強大的監控和擴展功能的數據庫連接池。github地址
本項目的項目框架為SpringBoot+Mybatis+Security,并將druid到項目中,作為一個輔助工具幫助提升項目的性能。
1、設置項目依賴
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency>
2、application.yml中配置Druid數據源,并設置監控參數。YAML文件格式化校驗(https://old.qqe2.com/jsontool/yaml.php)
spring: #####DruidDataSource配置##################### type: com.alibaba.druid.pool.DruidDataSource initialSize: 5 minIdle: 5 maxActive: 20 # 配置獲取連接等待超時的時間 maxWait: 60000 # 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 timeBetweenEvictionRunsMillis: 60000 # 配置一個連接在池中最小生存的時間,單位是毫秒 minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false # 打開PSCache,并且指定每個連接上PSCache的大小 poolPreparedStatements: true maxPoolPreparedStatementPerConnectionSize: 20 # 配置監控統計攔截的filters,去掉后監控界面sql無法統計,'wall'用于防火墻 filters: stat,wall,slf4j # 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄 connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 #合并多個DruidDataSource的監控數據 useGlobalDataSourceStat: true
3、設置druid訪問頁面的用戶名和密碼,只需要在springboot啟動類中加入@bean配置即可:
/** * @description 注冊一個StatViewServlet,進行druid監控頁面配置 * @return servlet registration bean */ @Bean public ServletRegistrationBean druidStatViewServlet() { //先配置管理后臺的servLet,訪問的入口為/druid/ ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean( new StatViewServlet(), "/druid/*"); // IP白名單 (沒有配置或者為空,則允許所有訪問) servletRegistrationBean.addInitParameter("allow", "127.0.0.1"); // IP黑名單 (存在共同時,deny優先于allow) servletRegistrationBean.addInitParameter("deny", ""); servletRegistrationBean.addInitParameter("loginUsername", "admin"); servletRegistrationBean.addInitParameter("loginPassword", "sdb3309"); servletRegistrationBean.addInitParameter("resetEnable", "false"); return servletRegistrationBean; }
4、注冊一個過濾器,允許Druid監控頁面的正常瀏覽
/** * @description 注冊一個過濾器,允許頁面正常瀏覽 * @return filter registration bean */ @Bean public FilterRegistrationBean druidStatFilter(){ FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean( new WebStatFilter()); // 添加過濾規則. filterRegistrationBean.addUrlPatterns("/*"); // 添加不需要忽略的格式信息. filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); return filterRegistrationBean; }
5、啟動項目后,訪問頁面http://ip:port/druid/sql.html(其中ip和端口號為項目的ip和端口號),使用配置的用戶名與密碼登錄,就可以訪問監控頁面了。
開啟慢sql監控
SQL監控中,有一項關于sql執行最慢執行時間的統計,但是只有一個值,就是一條sql語句最慢的執行時間記錄,其他執行時間是看不到的,只能通過總時間來進行粗略的估計;一旦項目重啟,這些記錄就全部消失,因此需要制定相應的日志輸出策略。
具體步驟:
1、配置慢sql及日志攔截器
/** * @description 配置慢sql攔截器 * @return */ @Bean(name = "statFilter") public StatFilter statFilter(){ StatFilter statFilter = new StatFilter(); //慢sql時間設置,即執行時間大于200毫秒的都是慢sql statFilter.setSlowSqlMillis(30); statFilter.setLogSlowSql(true); statFilter.setMergeSql(true); return statFilter; } /** * @description 配置日志攔截器 * @return */ @Bean(name = "logFilter") public Slf4jLogFilter logFilter(){ Slf4jLogFilter slf4jLogFilter = new Slf4jLogFilter(); slf4jLogFilter.setDataSourceLogEnabled(true); slf4jLogFilter.setStatementExecutableSqlLogEnable(true); return slf4jLogFilter; }
2、修改application.yml,增加慢sql日志的輸出策略
logging: pattern: #配置日志格式 %d:日期 , %msg:日志信息 ,%n換行 console: "%d - %msg%n" #設置控制臺打印格式 file: "%d{yyyy/MM/dd-HH:mm} %-5level %logger- %msg%n" level: root: INFO org: springframework: security: ERROR web: ERROR hhu.yu: INFO file: name: YU.log max-history: 30
3、修改數據源配置,設置慢sql攔截器和sql攔截器
@Bean @Primary @Qualifier("mainDataSource") @ConfigurationProperties(prefix = "spring.datasource.main") DataSource mainConfig() throws SQLException{ DruidDataSource build = DruidDataSourceBuilder.create().build(); List<Filter> filters = new ArrayList<>(); filters.add(statFilter()); filters.add(logFilter()); build.setProxyFilters(filters); return build;
重啟系統后查看druid監控后臺,由于設置了慢sql的時間為大于200毫秒,所以執行時間大于200毫秒的都會被紅色標注。查看日志文件,可以看到日志文件中存在慢sql記錄的數據(包括慢sql以及這條sql語句執行的時間)
開啟Spring監控
在監控面板中開啟spring監控功能
@Configuration @EnableAspectJAutoProxy(proxyTargetClass = true) public class DruidAspectConfig { @Bean public DruidStatInterceptor druidStatInterceptor() { DruidStatInterceptor dsInterceptor = new DruidStatInterceptor(); return dsInterceptor; } @Bean @Scope("prototype") public JdkRegexpMethodPointcut druidStatPointcut() { JdkRegexpMethodPointcut pointcut = new JdkRegexpMethodPointcut(); pointcut.setPatterns("com.qa.cloud.mapper.*","com.qa.cloud.service.*"); return pointcut; } @Bean public DefaultPointcutAdvisor druidStatAdvisor(DruidStatInterceptor druidStatInterceptor, JdkRegexpMethodPointcut druidStatPointcut) { DefaultPointcutAdvisor defaultPointAdvisor = new DefaultPointcutAdvisor(); defaultPointAdvisor.setPointcut(druidStatPointcut); defaultPointAdvisor.setAdvice(druidStatInterceptor); return defaultPointAdvisor; }
以上是“springboot項目中如何實現訪問druid內置監控頁面”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。