SpringBoot2 基礎案例(07):整合Druid連線池,配置監控介面
本文原始碼: GitHub·點這裡 || GitEE·點這裡
一、Druid連線池
1、druid簡介
Druid連線池是阿里巴巴開源的資料庫連線池專案。Druid連線池為監控而生,內建強大的監控功能,監控特性不影響效能。功能強大,能防SQL隱碼攻擊,內建Loging能診斷Hack應用行為。
Druid連線池是阿里巴巴內部唯一使用的連線池,在內部資料庫相關中介軟體TDDL/DRDS 都內建使用強依賴了Druid連線池,經過阿里內部數千上萬的系統大規模驗證,經過歷年雙十一超大規模併發驗證。
2、druid特點
穩定性特性,阿里巴巴的業務驗證
完備的監控資訊,快速診斷系統的瓶頸
內建了WallFilter 提供防SQL隱碼攻擊功能
二、整合SpringBoot2框架
1、引入核心依賴
<!-- 資料庫依賴 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.13</version>
</dependency>
<!-- JDBC 依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
2、資料來源配置檔案
spring:
application:
# 應用名稱
name: node07-boot-druid
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/data_one?useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull&useSSL=false
username: root
password: 123
initial-size: 10
max-active: 100
min-idle: 10
max-wait: 60000
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
max-evictable-idle-time-millis: 60000
validation-query: SELECT 1 FROM DUAL
# validation-query-timeout: 5000
test-on-borrow: false
test-on-return: false
test-while-idle: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
#filters: #配置多個英文逗號分隔(統計,sql注入,log4j過濾)
filters: stat,wall
stat-view-servlet:
enabled: true
url-pattern: /druid/*
3、核心配置類
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
/**
* Druid資料庫連線池配置檔案
*/
@Configuration
public class DruidConfig {
private static final Logger logger = LoggerFactory.getLogger(DruidConfig.class);
@Value("${spring.datasource.druid.url}")
private String dbUrl;
@Value("${spring.datasource.druid.username}")
private String username;
@Value("${spring.datasource.druid.password}")
private String password;
@Value("${spring.datasource.druid.driverClassName}")
private String driverClassName;
@Value("${spring.datasource.druid.initial-size}")
private int initialSize;
@Value("${spring.datasource.druid.max-active}")
private int maxActive;
@Value("${spring.datasource.druid.min-idle}")
private int minIdle;
@Value("${spring.datasource.druid.max-wait}")
private int maxWait;
@Value("${spring.datasource.druid.pool-prepared-statements}")
private boolean poolPreparedStatements;
@Value("${spring.datasource.druid.max-pool-prepared-statement-per-connection-size}")
private int maxPoolPreparedStatementPerConnectionSize;
@Value("${spring.datasource.druid.time-between-eviction-runs-millis}")
private int timeBetweenEvictionRunsMillis;
@Value("${spring.datasource.druid.min-evictable-idle-time-millis}")
private int minEvictableIdleTimeMillis;
@Value("${spring.datasource.druid.max-evictable-idle-time-millis}")
private int maxEvictableIdleTimeMillis;
@Value("${spring.datasource.druid.validation-query}")
private String validationQuery;
@Value("${spring.datasource.druid.test-while-idle}")
private boolean testWhileIdle;
@Value("${spring.datasource.druid.test-on-borrow}")
private boolean testOnBorrow;
@Value("${spring.datasource.druid.test-on-return}")
private boolean testOnReturn;
@Value("${spring.datasource.druid.filters}")
private String filters;
@Value("{spring.datasource.druid.connection-properties}")
private String connectionProperties;
/**
* Druid 連線池配置
*/
@Bean //宣告其為Bean例項
public DruidDataSource dataSource() {
DruidDataSource datasource = new DruidDataSource();
datasource.setUrl(dbUrl);
datasource.setUsername(username);
datasource.setPassword(password);
datasource.setDriverClassName(driverClassName);
datasource.setInitialSize(initialSize);
datasource.setMinIdle(minIdle);
datasource.setMaxActive(maxActive);
datasource.setMaxWait(maxWait);
datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
datasource.setMaxEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
datasource.setValidationQuery(validationQuery);
datasource.setTestWhileIdle(testWhileIdle);
datasource.setTestOnBorrow(testOnBorrow);
datasource.setTestOnReturn(testOnReturn);
datasource.setPoolPreparedStatements(poolPreparedStatements);
datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
try {
datasource.setFilters(filters);
} catch (Exception e) {
logger.error("druid configuration initialization filter", e);
}
datasource.setConnectionProperties(connectionProperties);
return datasource;
}
/**
* JDBC操作配置
*/
@Bean(name = "dataOneTemplate")
public JdbcTemplate jdbcTemplate (@Autowired DruidDataSource dataSource){
return new JdbcTemplate(dataSource) ;
}
/**
* 配置 Druid 監控介面
*/
@Bean
public ServletRegistrationBean statViewServlet(){
ServletRegistrationBean srb =
new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
//設定控制檯管理使用者
srb.addInitParameter("loginUsername","root");
srb.addInitParameter("loginPassword","root");
//是否可以重置資料
srb.addInitParameter("resetEnable","false");
return srb;
}
@Bean
public FilterRegistrationBean statFilter(){
//建立過濾器
FilterRegistrationBean frb =
new FilterRegistrationBean(new WebStatFilter());
//設定過濾器過濾路徑
frb.addUrlPatterns("/*");
//忽略過濾的形式
frb.addInitParameter("exclusions",
"*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return frb;
}
}
4、簡單測試類
@RestController
public class DruidController {
private static final Logger LOG = LoggerFactory.getLogger(DruidController.class);
@Resource
private JdbcTemplate jdbcTemplate ;
@RequestMapping("/druidData")
public String druidData (){
String sql = "SELECT COUNT(1) FROM d_phone" ;
Integer countOne = jdbcTemplate.queryForObject(sql,Integer.class) ;
// countOne==2
LOG.info("countOne=="+countOne);
return "success" ;
}
}
三、測試效果
完成一次資料請求後,訪問如下連結。
http://localhost:8007/druid
輸入配置的使用者名稱和密碼:
root root
1、Druid監控首頁
主要展示連結資料庫的基礎資訊。
2、Druid監控資料來源
連線池配置的各項詳細屬性,可以參考這裡檢視,無需再從網上查詢。
3、Druid監控SQL執行
所有執行的SQL,都會在這裡被監控到,且會有SQL執行的詳細計劃。
四、原始碼地址
GitHub·地址
https://github.com/cicadasmile/spring-boot-base
GitEE·地址
https://gitee.com/cicadasmile/spring-boot-base
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69957347/viewspace-2671333/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Spring系列之整合Druid連線池及監控配置SpringUI
- SpringBoot專案整合阿里Druid連線池Spring Boot阿里UI
- Spring Boot整合Druid資料庫連線池Spring BootUI資料庫
- Springboot 整合阿里資料庫連線池 druidSpring Boot阿里資料庫UI
- springboot之Druid連線池講解+mybatis整合+PageHelper整合Spring BootUIMyBatis
- springboot專案整合druid資料庫連線池Spring BootUI資料庫
- druid資料庫連線池的配置類UI資料庫
- SpringBoot整合阿里巴巴Druid監控Spring Boot阿里UI
- MyBatis學習-使用Druid連線池將Maybatis整合到springMyBatisUISpring
- druid連線池常見異常UI
- Druid-目前最好的連線池UI
- 聊聊資料庫連線池 Druid資料庫UI
- Druid MySQL 連線池本地實踐UIMySql
- 資料庫連線池-Druid資料庫連線池原始碼解析資料庫UI原始碼
- Java Druid資料庫連線池+SpringJDBCJavaUI資料庫SpringJDBC
- jsoup爬蟲技術+druid連線池JS爬蟲UI
- Druid連線池引數maxWait配置錯誤引發的問題UIAI
- 自定義帶監控的資料庫連線池資料庫
- Druid資料庫連線池使用體驗UI資料庫
- SpringBoot2 基礎案例(08):整合Redis資料庫,實現快取管理Spring BootRedis資料庫快取
- 資料庫連線池優化配置(druid,dbcp,c3p0)資料庫優化UI
- SpringBoot2 基礎案例(06):引入JdbcTemplate,和多資料來源配置Spring BootJDBC
- springboot activiti 整合專案框架原始碼 shiro 安全框架 druid 資料庫連線池Spring Boot框架原始碼UI資料庫
- SpringBoot2 基礎案例(09):整合JPA持久層框架,簡化資料庫操作Spring Boot框架資料庫
- 資料庫連線池_druid基本使用&工具類資料庫UI
- Druid監控踩坑指南UI
- Druid資料庫連線池就這麼簡單UI資料庫
- SpringBoot2 基礎案例(12):基於轉賬案例,演示事務管理操作Spring Boot
- 安裝配置PGBouncer連線池
- SpringBoot中關於 HikariPool、Druid及常用連線池的比較Spring BootUI
- SpringBoot2 基礎案例(13):基於Cache註解,管理Redis快取Spring BootRedis快取
- Java 監控基礎 - 使用 JMX 監控和管理 Java 程式Java
- Golang 連線池的幾種實現案例Golang
- mysql資料庫連線池配置教程MySql資料庫
- 前端監控基礎篇 — Docker + Sentry 搭建前端監控系統前端Docker
- 基於C++11的資料庫連線池環境配置C++資料庫
- 無線基礎配置
- 這個 Redis 連線池的新監控方式針不戳~我再加一點佐料Redis