日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

 

1、簡介

Druid是阿里巴巴的一個開源項目,號稱為監(jiān)控而生的數(shù)據(jù)庫連接池,在功能、性能、擴展性方面都超過其他,例如 DBCP、C3P0、BoneCP、Proxool、JBoss、DataSource 等連接池,而且Druid已經(jīng)在阿里巴巴部署了超過600個應(yīng)用,通過了極為嚴(yán)格的考驗,這才收獲了大家的青睞!

Druid是一個JDBC組件,包含三個部分:

  • DruidDriver 代理Driver,能夠提供基于Filter-Chain模式的插件體系。
  • DruidDataSource 高效管理的數(shù)據(jù)庫連接池。
  • SQLParser SQL語法分析

強大的監(jiān)控特性

Druid內(nèi)置了一個功能強大的StatFilter插件可以監(jiān)控數(shù)據(jù)庫訪問性能,可以清楚知道連接池和SQL的工作情況。

監(jiān)控SQL的執(zhí)行時間、ResultSet持有時間、返回行數(shù)、更新行數(shù)、錯誤次數(shù)、錯誤堆棧信息。

SQL執(zhí)行的耗時區(qū)間分布。什么是耗時區(qū)間分布呢?比如說,某個SQL執(zhí)行了1000次,其中0-1毫秒?yún)^(qū)間50次,1-10毫秒800次,10-100毫秒100次,100-1000毫秒30次,1-10秒15次,10秒以上5次。通過耗時區(qū)間分布,能夠非常清楚知道SQL的執(zhí)行耗時情況。

監(jiān)控連接池的物理連接創(chuàng)建和銷毀次數(shù)、邏輯連接的申請和關(guān)閉次數(shù)、非空等待次數(shù)、PSCache命中率等。

數(shù)據(jù)庫密碼加密

直接把數(shù)據(jù)庫密碼寫在配置文件中,容易導(dǎo)致安全問題。DruidDriver和DruidDataSource都支持PasswordCallback。

SQLParser

SQL Parser是Druid的一個重要組成部分,它提供了MySQL、Oracle、Postgresql、SQL-92的SQL的完整支持,這是一個手寫的高性能SQL Parser,支持Visitor模式,使得分析SQL的抽象語法樹很方便。簡單SQL語句用時10微秒以內(nèi),復(fù)雜SQL用時30微秒。

通過Druid提供的SQL Parser可以在JDBC層攔截SQL做相應(yīng)處理,比如防御SQL注入(WallFilter)、合并統(tǒng)計沒有參數(shù)化的SQL(StatFilter的mergeSql)、SQL格式化、分庫分表。

2、依賴集成

在pom.xml中引入druid官方提供的Spring Boot Starter組件

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.21</version>
</dependency>

Application.yaml 配置文件配置數(shù)據(jù)庫信息、以及Druid的連接池

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://127.0.0.1:3306/ds0?characterEncoding=utf-8&useSSL=false
      username: root
      password: 111111
      initial-size: 5
      min-idle: 5
      max-active: 20
      max-wait: 60000
      time-between-eviction-runs-millis: 60000
      min-evictable-idle-time-millis: 300000
      validation-query: SELECT 'x'
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      pool-prepared-statements: false
      max-pool-prepared-statement-per-connection-size: -1
      use-global-data-source-stat: true
      connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
      filters: stat,wall,log4j

3、Druid 配置詳解

配置缺省值說明name
如果存在多個數(shù)據(jù)源,監(jiān)控的時候可以通過名字來區(qū)分開來。如果沒有配置,將會生成一個名字,格式是:”DataSource-“ + System.identityHashCode(this)url
連接數(shù)據(jù)庫的url,不同數(shù)據(jù)庫不一樣username
連接數(shù)據(jù)庫的用戶名password
連接數(shù)據(jù)庫的密碼。如果你不希望密碼直接寫在配置文件中,可以使用ConfigFilterdriverClassName
根據(jù)url自動識別 ,這一項可配可不配,如果不配置druid會根據(jù)url自動識別dbType,然后選擇相應(yīng)的driverClassNameinitialSize0初始化時建立物理連接的個數(shù)。初始化發(fā)生在顯示調(diào)用init方法,或者第一次getConnection時maxActive8最大連接池數(shù)minIdle
最小連接池數(shù)maxWait
獲取連接時最大等待時間,單位毫秒。配置了maxWait之后,缺省啟用公平鎖,并發(fā)效率會有所下降,如果需要可以通過配置useUnfairLock屬性為true使用非公平鎖。poolPreparedStatementsfalse是否緩存preparedStatement,也就是PSCache。PSCache對支持游標(biāo)的數(shù)據(jù)庫性能提升巨大,比如說oracle。在mysql下建議關(guān)閉。maxPoolPreparedStatementPerConnectionSize-1要啟用PSCache,必須配置大于0,當(dāng)大于0時,poolPreparedStatements自動觸發(fā)修改為true。在Druid中,不會存在Oracle下PSCache占用內(nèi)存過多的問題,可以把這個數(shù)值配置大一些,比如說100validationQuery
用來檢測連接是否有效的sql,要求是一個查詢語句,常用select ‘x’。如果validationQuery為null,testOnBorrow、testOnReturn、testWhileIdle都不會起作用。validationQueryTimeout
單位:秒,檢測連接是否有效的超時時間。底層調(diào)用jdbc Statement對象的void setQueryTimeout(int seconds)方法testOnBorrowtrue申請連接時執(zhí)行validationQuery檢測連接是否有效,做了這個配置會降低性能。testOnReturnfalse歸還連接時執(zhí)行validationQuery檢測連接是否有效,做了這個配置會降低性能。testWhileIdlefalse建議配置為true,不影響性能,并且保證安全性。申請連接的時候檢測,如果空閑時間大于timeBetweenEvictionRunsMillis,執(zhí)行validationQuery檢測連接是否有效。keepAlivefalse (1.0.28)連接池中的minIdle數(shù)量以內(nèi)的連接,空閑時間超過minEvictableIdleTimeMillis,則會執(zhí)行keepAlive操作。timeBetweenEvictionRunsMillis1分鐘(1.0.14)有兩個含義:1) Destroy線程會檢測連接的間隔時間,如果連接空閑時間大于等于minEvictableIdleTimeMillis則關(guān)閉物理連接。2) testWhileIdle的判斷依據(jù),詳細(xì)看testWhileIdle屬性的說明numTestsPerEvictionRun30分鐘(1.0.14)不再使用,一個DruidDataSource只支持一個EvictionRunminEvictableIdleTimeMillis
連接保持空閑而不被驅(qū)逐的最小時間connectionInitSqls
物理連接初始化的時候執(zhí)行的sqlexceptionSorter根據(jù)dbType自動識別當(dāng)數(shù)據(jù)庫拋出一些不可恢復(fù)的異常時,拋棄連接filters
屬性類型是字符串,通過別名的方式配置擴展插件,常用的插件有:監(jiān)控統(tǒng)計用的filter:stat, 日志用的filter:log4j , 防御sql注入的filter:wallproxyFilters
類型是List,如果同時配置了filters和proxyFilters,是組合關(guān)系,并非替換關(guān)系

Druid提供以下幾種Filter信息:

別名Filter類名defaultcom.alibaba.druid.filter.stat.StatFilterstatcom.alibaba.druid.filter.stat.StatFiltermergeStatcom.alibaba.druid.filter.stat.MergeStatFilterencodingcom.alibaba.druid.filter.encoding.EncodingConvertFilterlog4jcom.alibaba.druid.filter.logging.Log4jFilterlog4j2com.alibaba.druid.filter.logging.Log4j2Filterslf4jcom.alibaba.druid.filter.logging.Slf4jLogFiltercommonloggingcom.alibaba.druid.filter.logging.CommonsLogFilterwallcom.alibaba.druid.wall.WallFilter

4、Druid 監(jiān)控

支持多種形式,本文列舉的是JAVA類創(chuàng)建Bean實例方式。

@Bean
public ServletRegistrationBean druidServlet() {
    logger.info("init Druid Servlet Configuration ");
    ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
    servletRegistrationBean.setServlet(new StatViewServlet());
    servletRegistrationBean.addUrlMappings("/druid/*");
    Map<String, String> initParameters = new HashMap<String, String>();
    initParameters.put("loginUsername", "admin");// 用戶名
    initParameters.put("loginPassword", "admin");// 密碼
    initParameters.put("resetEnable", "false");// 禁用html頁面上的“Reset All”功能
    initParameters.put("allow", ""); // IP白名單 (沒有配置或者為空,則允許所有訪問)
    //initParameters.put("deny", "192.168.20.38");// IP黑名單 (存在共同時,deny優(yōu)先于allow)
    servletRegistrationBean.setInitParameters(initParameters);
    return servletRegistrationBean;
}

@Bean
public FilterRegistrationBean filterRegistrationBean() {
    FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
    filterRegistrationBean.setFilter(new WebStatFilter());
    filterRegistrationBean.addUrlPatterns("/*");
    filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
    return filterRegistrationBean;
}

也可以采用另一種方式,在application.properties中添加Druid的監(jiān)控配置

# druid連接池監(jiān)控
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=admin

# 配置 StatFilter
spring.datasource.druid.filter.stat.log-slow-sql=true
spring.datasource.druid.filter.stat.slow-sql-millis=2000

# 排除一些靜態(tài)資源,以提高效率
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*

配置完成后, 并完成相關(guān)的數(shù)據(jù)庫操作配置, 啟動Spring Boot應(yīng)用程序。

訪問Druid監(jiān)控后臺頁面:http://127.0.0.1:8090/druid/sql.html ,

首先進入登錄頁,賬號和密碼在上面的配置項中

數(shù)據(jù)庫連接池為什么首選Druid

 

輸入用戶名:admin,密碼:admin,可以看到詳細(xì)的監(jiān)控頁面

數(shù)據(jù)庫連接池為什么首選Druid

 

首頁會展示項目使用的 JDK 版本、數(shù)據(jù)庫驅(qū)動、JVM 相關(guān)統(tǒng)計信息。根據(jù)上面的菜單可以看出 Druid 的功能非常強大,支持?jǐn)?shù)據(jù)源、SQL 監(jiān)控、SQL 防火墻、URI 監(jiān)控等很多功能。

我們這里重點介紹一下 SQL 監(jiān)控,具體的展示信息如下:

數(shù)據(jù)庫連接池為什么首選Druid

 

這里的 SQL 監(jiān)控會將項目中具體執(zhí)行的 SQL 打印出來,展示此 SQL 執(zhí)行了多少次、每次返回多少數(shù)據(jù)、執(zhí)行的時間分布是什么。這些功能非常的實用,方便我們在實際生產(chǎn)中查找出慢 SQL,最后對 SQL 進行調(diào)優(yōu)。

5、項目源碼地址https://github.com/aalansehaiyang/spring-boot-bulking
模塊:spring-boot-bulking-druid

分享到:
標(biāo)簽:數(shù)據(jù)庫 連接池
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定