springboot項目中實現(xiàn)訪問druid內(nèi)置監(jiān)控頁面
springboot 訪問druid內(nèi)置監(jiān)控頁面
1、首先加入druid依賴
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.9</version> </dependency>
2、設置配置文件:
# 數(shù)據(jù)庫訪問配置 # 主數(shù)據(jù)源,默認的 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 # 下面為連接池的補充設置,應用到上面所有數(shù)據(jù)源中 # 初始化大小,最小,最大 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 # 配置監(jiān)控統(tǒng)計攔截的filters,去掉后監(jiān)控界面sql無法統(tǒng)計,'wall'用于防火墻 spring.datasource.filters=stat,wall,log4j # 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄 spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 # 合并多個DruidDataSource的監(jiān)控數(shù)據(jù) #spring.datasource.useGlobalDataSourceStat=true
3、啟動項目后
訪問頁面http://127.0.0.1:8001/druid/sql.html,就可以訪問監(jiān)控頁面了,其中ip和端口號為項目的ip和端口號。
頁面效果如下:
4、設置druid訪問頁面的用戶名和密碼
只需要在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優(yōu)先于allow) registrationBean.addInitParameter("loginUsername", "root"); registrationBean.addInitParameter("loginPassword", "1234"); registrationBean.addInitParameter("resetEnable", "false"); return registrationBean; }
druid監(jiān)控頁面的配置和使用
Druid運用背景
Druid是由阿里巴巴團隊開發(fā)的,能夠提供強大的監(jiān)控和擴展功能的數(shù)據(jù)庫連接池。github地址
本項目的項目框架為SpringBoot+Mybatis+Security,并將druid到項目中,作為一個輔助工具幫助提升項目的性能。
Druid配置
1、設置項目依賴
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency>
2、application.yml中配置Druid數(shù)據(jù)源,并設置監(jiān)控參數(shù)。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 # 配置監(jiān)控統(tǒng)計攔截的filters,去掉后監(jiān)控界面sql無法統(tǒng)計,'wall'用于防火墻 filters: stat,wall,slf4j # 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄 connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 #合并多個DruidDataSource的監(jiān)控數(shù)據(jù) useGlobalDataSourceStat: true
3、設置druid訪問頁面的用戶名和密碼,只需要在springboot啟動類中加入@bean配置即可:
/** * @description 注冊一個StatViewServlet,進行druid監(jiān)控頁面配置 * @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優(yōu)先于allow) servletRegistrationBean.addInitParameter("deny", ""); servletRegistrationBean.addInitParameter("loginUsername", "admin"); servletRegistrationBean.addInitParameter("loginPassword", "sdb3309"); servletRegistrationBean.addInitParameter("resetEnable", "false"); return servletRegistrationBean; }
4、注冊一個過濾器,允許Druid監(jiān)控頁面的正常瀏覽
/** * @description 注冊一個過濾器,允許頁面正常瀏覽 * @return filter registration bean */ @Bean public FilterRegistrationBean druidStatFilter(){ FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean( new WebStatFilter()); // 添加過濾規(guī)則. filterRegistrationBean.addUrlPatterns("/*"); // 添加不需要忽略的格式信息. filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); return filterRegistrationBean; }
5、啟動項目后,訪問頁面http://ip:port/druid/sql.html(其中ip和端口號為項目的ip和端口號),使用配置的用戶名與密碼登錄,就可以訪問監(jiān)控頁面了。
Druid詳細配置
開啟慢sql監(jiān)控
SQL監(jiān)控中,有一項關于sql執(zhí)行最慢執(zhí)行時間的統(tǒng)計,但是只有一個值,就是一條sql語句最慢的執(zhí)行時間記錄,其他執(zhí)行時間是看不到的,只能通過總時間來進行粗略的估計;一旦項目重啟,這些記錄就全部消失,因此需要制定相應的日志輸出策略。
具體步驟:
1、配置慢sql及日志攔截器
/** * @description 配置慢sql攔截器 * @return */ @Bean(name = "statFilter") public StatFilter statFilter(){ StatFilter statFilter = new StatFilter(); //慢sql時間設置,即執(zhí)行時間大于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、修改數(shù)據(jù)源配置,設置慢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;
重啟系統(tǒng)后查看druid監(jiān)控后臺,由于設置了慢sql的時間為大于200毫秒,所以執(zhí)行時間大于200毫秒的都會被紅色標注。查看日志文件,可以看到日志文件中存在慢sql記錄的數(shù)據(jù)(包括慢sql以及這條sql語句執(zhí)行的時間)
開啟Spring監(jiān)控
在監(jiān)控面板中開啟spring監(jiān)控功能
@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; }
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java for循環(huán)和foreach循環(huán)的性能對比分析
這篇文章主要介紹了Java for循環(huán)和foreach循環(huán)的性能對比分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09java實現(xiàn)sftp客戶端上傳文件以及文件夾的功能代碼
本篇文章主要介紹了java實現(xiàn)sftp客戶端上傳文件以及文件夾的功能代碼,具有一定的參考價值,有興趣的可以了解一下。2017-02-02spring cloud consul注冊的服務報錯critical的解決
這篇文章主要介紹了spring cloud consul注冊的服務報錯critical的解決,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-03-03Spring Boot整合FTPClient線程池的實現(xiàn)示例
這篇文章主要介紹了Spring Boot整合FTPClient線程池的實現(xiàn)示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12