數(shù)據(jù)庫操作–開啟Durid 監(jiān)控
整合Druid 到Spring-Boot
官方文檔
使用手冊: https://github.com/alibaba/druid
- 中文手冊: https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
- English手冊: https://github.com/alibaba/druid/wiki/FAQ
- Druid Spring Boot Starter 手冊:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
基本介紹
-
HiKariCP: 目前市面上非常優(yōu)秀的數(shù)據(jù)源, 是springboot2 默認數(shù)據(jù)源。
-
Druid: 性能優(yōu)秀,Druid 提供性能卓越的連接池功能外【Java 基礎】,還集成了SQL 監(jiān)控,黑名單攔截等功能,強大的監(jiān)控特性,通過Druid 提供的監(jiān)控功能,可以清楚知道連接池和SQL 的工作情況,所以根據(jù)項目需要,我們也要掌握Druid 和SpringBoot 整合。
-
整合Druid 到Spring-Boot 方式
● 自定義方式
● 引入starter 方式
Durid 基本使用
需求: 將Spring-Boot 的數(shù)據(jù)源切換成Druid
代碼實現(xiàn)
1.修改pom.xml , 引入druid 依賴
<!-- 引入druid 依賴-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.17</version>
</dependency>
2.創(chuàng)建com/nlc/usersys/config/DruidDataSourceConfig.java 配置類
@Configuration
public class DruidDataSourceConfig {
//編寫方法,注入DruidDataSource
//說明:為什么我們注入自己的DataSource , 默認的HiKariDatasource失效?
//1. 默認的數(shù)據(jù)源是如配置? @ConditionalOnMissingBean({ DataSource.class, XADataSource.class })
// 解讀:通過@ConditionalOnMissingBean({ DataSource.class}) 判斷如果容器有DataSource Bean 就不注入默認的HiKariDatasource
//2. debug源碼.
@ConfigurationProperties("spring.datasource")
@Bean
public DataSource dataSource() throws SQLException {
//1. 配置了 @ConfigurationProperties("spring.datasource")
// 就可以讀取到application.yml的配置
//2. 我們就不需要調用DruidDataSource 對象的setXxx, 會自動關聯(lián)
DruidDataSource druidDataSource = new DruidDataSource();
// druidDataSource.setUrl("jdbc:mysql://localhost:3306/furn_ssm?useSSL=true&useUnicode=true&characterEncoding=UTF-8");
// druidDataSource.setUsername("root");
// druidDataSource.setPassword("123456");
return druidDataSource;
}
}
- 完成測試,運行ApplicationTests.java , 觀察數(shù)據(jù)源的運行類型
Durid 監(jiān)控功能-SQL 監(jiān)控
需求:
配置Druid 的監(jiān)控功能,包括SQL 監(jiān)控、SQL 防火墻、Web 應用、Session 監(jiān)控等
SQL 監(jiān)控數(shù)據(jù)
- 修改com/nlc/usersys/config/DruidDataSourceConfig.java , 增加druid 監(jiān)控功能
地址:https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatViewServlet%E9%85%8D%E7%BD%AE
@Configuration
public class DruidDataSourceConfig {
//編寫方法,注入DruidDataSource
//說明:為什么我們注入自己的DataSource , 默認的HiKariDatasource失效?
//1. 默認的數(shù)據(jù)源是如配置? @ConditionalOnMissingBean({ DataSource.class, XADataSource.class })
// 解讀:通過@ConditionalOnMissingBean({ DataSource.class}) 判斷如果容器有DataSource Bean 就不注入默認的HiKariDatasource
//2. debug源碼.
@ConfigurationProperties("spring.datasource")
@Bean
public DataSource dataSource() throws SQLException {
//1. 配置了 @ConfigurationProperties("spring.datasource")
// 就可以讀取到application.yml的配置
//2. 我們就不需要調用DruidDataSource 對象的setXxx, 會自動關聯(lián)
DruidDataSource druidDataSource = new DruidDataSource();
// druidDataSource.setUrl("jdbc:mysql://localhost:3306/furn_ssm?useSSL=true&useUnicode=true&characterEncoding=UTF-8");
// druidDataSource.setUsername("root");
// druidDataSource.setPassword("123456");
return druidDataSource;
}
//配置druid的監(jiān)控頁功能
@Bean
public ServletRegistrationBean statViewServlet() {
//創(chuàng)建StatViewServlet
StatViewServlet statViewServlet = new StatViewServlet();
ServletRegistrationBean<StatViewServlet> registrationBean =
new ServletRegistrationBean<>(statViewServlet, "/druid/*");
//設置init-parameter, 設置用戶名和密碼
registrationBean.addInitParameter("loginUsername", "hhh");
registrationBean.addInitParameter("loginPassword", "666666");
return registrationBean;
}
}
- 完成測試: 訪問http://localhost:10000/druid/index.html 不會被攔截, 如果沒有問題,會看到這個頁面
-
修改com/nlc/usersys/config/DruidDataSourceConfig.java , 加入監(jiān)控功能
參考: https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter
@ConfigurationProperties("spring.datasource")
@Bean
public DataSource dataSource() throws SQLException {
//1. 配置了 @ConfigurationProperties("spring.datasource")
// 就可以讀取到application.yml的配置
//2. 我們就不需要調用DruidDataSource 對象的setXxx, 會自動關聯(lián)
DruidDataSource druidDataSource = new DruidDataSource();
// druidDataSource.setUrl("jdbc:mysql://localhost:3306/furn_ssm?useSSL=true&useUnicode=true&characterEncoding=UTF-8");
// druidDataSource.setUsername("root");
// druidDataSource.setPassword("123456");
//加入監(jiān)控功能, 加入了sql防火墻監(jiān)控
druidDataSource.setFilters("stat,wall");
return druidDataSource;
}
- 創(chuàng)建com/nlc/usersys/controller/DruidSqlController.java ,模擬操作DB 的請求
@Controller
public class DruidSqlController {
@Resource
private JdbcTemplate jdbcTemplate;
@ResponseBody
@GetMapping("/sql")
public List<Furn> crudDB() {
BeanPropertyRowMapper<Furn> rowMapper = new BeanPropertyRowMapper<>(Furn.class);
List<Furn> furns = jdbcTemplate.query("select * from `furn`", rowMapper);
for (Furn furn : furns) {
System.out.println(furn);
}
return furns;
}
}
SQL 監(jiān)控數(shù)據(jù)-測試頁面
完成測試, 觀察SQL 監(jiān)控數(shù)據(jù), 瀏覽器輸入http://localhost:10000/druid/sql.html
各項的含義,請參考druid文檔
登陸后請求SQL路徑
Durid 監(jiān)控功能-Web 關聯(lián)監(jiān)控
需求:
配置Web 關聯(lián)監(jiān)控配置:Web 應用、URI 監(jiān)控
官方文檔https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
Web 關聯(lián)監(jiān)控配置-Web 應用、URI 監(jiān)控
- 修改com/nlc/usersys/config/DruidDataSourceConfig.java , 注入/ 增加WebStatFilter 用于采集web-jdbc 關聯(lián)監(jiān)控的數(shù)據(jù)
//配置WebStatFilter, 用于采集web-jdbc關聯(lián)的監(jiān)控數(shù)據(jù)
@Bean
public FilterRegistrationBean webStatFilter() {
//創(chuàng)建 WebStatFilter
WebStatFilter webStatFilter = new WebStatFilter();
FilterRegistrationBean<WebStatFilter> filterRegistrationBean =
new FilterRegistrationBean<>(webStatFilter);
//默認對所有的url請求進行監(jiān)控
filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));
//排除指定的url
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return filterRegistrationBean;
}
- 為了測試方便,修改com/nlc/usersys/config/WebConfig.java, 放行/sql 請求
@Configuration
public class WebConfig /*implements WebMvcConfigurer*/ {
@Bean
public WebMvcConfigurer webMvcConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addInterceptors(InterceptorRegistry registry) {
System.out.println("addInterceptors~~~");
//注冊攔截器
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/","/login","/images/**","/upload.html","/upload","/sql");
}
};
}
}
重啟項目
完成測試,重啟項目,看看Web 應用和URI 監(jiān)控是否生效
Durid 監(jiān)控功能-SQL 防火墻
需求: 配置SQL 防火墻
官方文檔https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
SQL 防火墻
- 修改com/nlc/usersys/config/DruidDataSourceConfig.java ,加入防火墻監(jiān)控
- 完成測試,重啟項目,看看SQL 防火墻監(jiān)控是否生效
Durid 監(jiān)控功能-Session 監(jiān)控
需求: 配置Session 監(jiān)控
官方文檔https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
Session 監(jiān)控
- 重啟項目, 先登錄管理系統(tǒng)
- 完成測試, 查看監(jiān)控頁需要輸入用戶名和密碼, 點擊Session 監(jiān)控,可以看到相關信息(注意要登錄用戶系統(tǒng),才能看到Session 監(jiān)控信息)
Druid Spring Boot Starter
基本介紹
- 前面我們使用的是自己引入druid+配置類方式整合Druid 和監(jiān)控
- Druid Spring Boot Starter 可以讓程序員在Spring Boot 項目中更加輕松集成Druid 和監(jiān)控
應用實例
需求: 使用Druid Spring Boot Starter 方式完成Druid 集成和監(jiān)控
具體實現(xiàn)
- 修改pom.xml 注銷druid 的依賴
<!-- <dependency>-->
<!-- <groupId>com.alibaba</groupId>-->
<!-- <artifactId>druid-spring-boot-starter</artifactId>-->
<!-- <version>1.1.17</version>-->
<!-- </dependency>-->
-
注銷com/nlc/usersys/config/DruidDataSourceConfig.java
-
這時測試,druid 失效
- 查看druid 文檔https://github.com/alibaba/druid,引入druid starter
- 確認druid starter 引入哪些依賴
- 修改resources/application.yml 增加配置參數(shù)
spring:
servlet:
multipart:
max-file-size: 10MB
max-request-size: 50MB
datasource: #配置數(shù)據(jù)源
# 說明: 如果你沒有指定useSSL=true ,啟動項目會報紅警告, 環(huán)境的問題,需要靈活處理
url: jdbc:mysql://localhost:3306/furn_ssm?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
#配置druid和監(jiān)控功能
druid:
stat-view-servlet:
enabled: true
login-username: jack
login-password: 666
reset-enable: false
web-stat-filter: #配置web監(jiān)控
enabled: true
url-pattern: /*
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
filter:
stat: #sql監(jiān)控
slow-sql-millis: 1000
log-slow-sql: true
enabled: true
wall: #配置sql防火墻
enabled: true
config:
drop-table-allow: false
select-all-column-allow: false
重啟項目,完成測試
完成測試文章來源:http://www.zghlxwxcb.cn/news/detail-666922.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-666922.html
到了這里,關于帶你了解SpringBoot---開啟Durid 監(jiān)控的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!