當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
SpringBoot2.0 基础案例(07):集成Druid连接池,配置监控界面
生活随笔
收集整理的這篇文章主要介紹了
SpringBoot2.0 基础案例(07):集成Druid连接池,配置监控界面
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、Druid連接池
1、druid簡介
Druid連接池是阿里巴巴開源的數據庫連接池項目。Druid連接池為監(jiān)控而生,內置強大的監(jiān)控功能,監(jiān)控特性不影響性能。功能強大,能防SQL注入,內置Loging能診斷Hack應用行為。
Druid連接池是阿里巴巴內部唯一使用的連接池,在內部數據庫相關中間件TDDL/DRDS 都內置使用強依賴了Druid連接池,經過阿里內部數千上萬的系統(tǒng)大規(guī)模驗證,經過歷年雙十一超大規(guī)模并發(fā)驗證。
2、druid特點
1)穩(wěn)定性特性,阿里巴巴的業(yè)務驗證 2)完備的監(jiān)控信息,快速診斷系統(tǒng)的瓶頸 3)內置了WallFilter 提供防SQL注入功能二、整合SpringBoot2.0框架
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-druiddatasource:type: com.alibaba.druid.pool.DruidDataSourcedruid:driverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/data_one?useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull&useSSL=falseusername: rootpassword: 123initial-size: 10max-active: 100min-idle: 10max-wait: 60000pool-prepared-statements: truemax-pool-prepared-statement-per-connection-size: 20time-between-eviction-runs-millis: 60000min-evictable-idle-time-millis: 300000max-evictable-idle-time-millis: 60000validation-query: SELECT 1 FROM DUAL# validation-query-timeout: 5000test-on-borrow: falsetest-on-return: falsetest-while-idle: trueconnectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000#filters: #配置多個英文逗號分隔(統(tǒng)計,sql注入,log4j過濾)filters: stat,wallstat-view-servlet:enabled: trueurl-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 監(jiān)控界面*/@Beanpublic ServletRegistrationBean statViewServlet(){ServletRegistrationBean srb =new ServletRegistrationBean(new StatViewServlet(),"/druid/*");//設置控制臺管理用戶srb.addInitParameter("loginUsername","root");srb.addInitParameter("loginPassword","root");//是否可以重置數據srb.addInitParameter("resetEnable","false");return srb;}@Beanpublic FilterRegistrationBean statFilter(){//創(chuàng)建過濾器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);@Resourceprivate JdbcTemplate jdbcTemplate ;@RequestMapping("/druidData")public String druidData (){String sql = "SELECT COUNT(1) FROM d_phone" ;Integer countOne = jdbcTemplate.queryForObject(sql,Integer.class) ;// countOne==2LOG.info("countOne=="+countOne);return "success" ;} }三、測試效果
完成一次數據請求后,訪問如下鏈接。
1、Druid監(jiān)控首頁
主要展示鏈接數據庫的基礎信息。
2、Druid監(jiān)控數據源
連接池配置的各項詳細屬性,可以參考這里查看,無需再從網上查找。
3、Druid監(jiān)控SQL執(zhí)行
所有執(zhí)行的SQL,都會在這里被監(jiān)控到,且會有SQL執(zhí)行的詳細計劃。
四、源代碼
GitHub地址:知了一笑 https://github.com/cicadasmile/spring-boot-base 碼云地址:知了一笑 https://gitee.com/cicadasmile/spring-boot-base
總結
以上是生活随笔為你收集整理的SpringBoot2.0 基础案例(07):集成Druid连接池,配置监控界面的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 树的更多相关算法-3
- 下一篇: JavaScript六种继承方式的递进推