引入依賴
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.22</version>
</dependency>
配置 | 缺省值 | 說(shuō)明 |
---|---|---|
name | 配置這個(gè)屬性的意義在于橱夭,如果存在多個(gè)數(shù)據(jù)源荆隘,監(jiān)控的時(shí)候可以通過(guò)名字來(lái)區(qū)分開來(lái)无埃。如果沒有配置,將會(huì)生成一個(gè)名字喊积,格式是:"DataSource-" + System.identityHashCode(this) | |
jdbcUrl | 連接數(shù)據(jù)庫(kù)的url烹困,不同數(shù)據(jù)庫(kù)不一樣。例如: mysql : jdbc:mysql://10.20.153.104:3306/druid2 oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto | |
username | 連接數(shù)據(jù)庫(kù)的用戶名 | |
password | 連接數(shù)據(jù)庫(kù)的密碼乾吻。如果你不希望密碼直接寫在配置文件中髓梅,可以使用ConfigFilter拟蜻。詳細(xì)看這里:https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter | |
driverClassName | 根據(jù)url自動(dòng)識(shí)別 | 這一項(xiàng)可配可不配,如果不配置druid會(huì)根據(jù)url自動(dòng)識(shí)別dbType枯饿,然后選擇相應(yīng)的driverClassName(建議配置下) |
initialSize | 0 | 初始化時(shí)建立物理連接的個(gè)數(shù)酝锅。初始化發(fā)生在顯示調(diào)用init方法,或者第一次getConnection時(shí) |
maxActive | 8 | 最大連接池?cái)?shù)量 |
maxIdle | 8 | 已經(jīng)不再使用奢方,配置了也沒效果 |
minIdle | 最小連接池?cái)?shù)量 | |
maxWait | 獲取連接時(shí)最大等待時(shí)間搔扁,單位毫秒。配置了maxWait之后蟋字,缺省啟用公平鎖稿蹲,并發(fā)效率會(huì)有所下降,如果需要可以通過(guò)配置useUnfairLock屬性為true使用非公平鎖鹊奖。 | |
poolPreparedStatements | false | 是否緩存preparedStatement场绿,也就是PSCache。PSCache對(duì)支持游標(biāo)的數(shù)據(jù)庫(kù)性能提升巨大嫉入,比如說(shuō)oracle。在mysql下建議關(guān)閉璧尸。 |
maxOpenPreparedStatements | -1 | 要啟用PSCache咒林,必須配置大于0,當(dāng)大于0時(shí)爷光,poolPreparedStatements自動(dòng)觸發(fā)修改為true垫竞。在Druid中,不會(huì)存在Oracle下PSCache占用內(nèi)存過(guò)多的問題蛀序,可以把這個(gè)數(shù)值配置大一些欢瞪,比如說(shuō)100 |
validationQuery | 用來(lái)檢測(cè)連接是否有效的sql,要求是一個(gè)查詢語(yǔ)句徐裸。如果validationQuery為null遣鼓,testOnBorrow、testOnReturn重贺、testWhileIdle都不會(huì)其作用骑祟。 | |
testOnBorrow | true | 申請(qǐng)連接時(shí)執(zhí)行validationQuery檢測(cè)連接是否有效,做了這個(gè)配置會(huì)降低性能气笙。 |
testOnReturn | false | 歸還連接時(shí)執(zhí)行validationQuery檢測(cè)連接是否有效次企,做了這個(gè)配置會(huì)降低性能。 |
testWhileIdle | false | 建議配置為true潜圃,不影響性能缸棵,并且保證安全性。申請(qǐng)連接的時(shí)候檢測(cè)谭期,如果空閑時(shí)間大于timeBetweenEvictionRunsMillis堵第,執(zhí)行validationQuery檢測(cè)連接是否有效吧凉。 |
timeBetweenEvictionRunsMillis | 有兩個(gè)含義: 1) Destroy線程會(huì)檢測(cè)連接的間隔時(shí)間 2) testWhileIdle的判斷依據(jù),詳細(xì)看testWhileIdle屬性的說(shuō)明 | |
numTestsPerEvictionRun | 不再使用型诚,一個(gè)DruidDataSource只支持一個(gè)EvictionRun | |
minEvictableIdleTimeMillis | ||
connectionInitSqls | 物理連接初始化的時(shí)候執(zhí)行的sql | |
exceptionSorter | 根據(jù)dbType自動(dòng)識(shí)別 | 當(dāng)數(shù)據(jù)庫(kù)拋出一些不可恢復(fù)的異常時(shí)客燕,拋棄連接 |
filters | 屬性類型是字符串,通過(guò)別名的方式配置擴(kuò)展插件狰贯,常用的插件有: 監(jiān)控統(tǒng)計(jì)用的filter:stat日志用的filter:log4j防御sql注入的filter:wall | |
proxyFilters | 類型是List<com.alibaba.druid.filter.Filter>也搓,如果同時(shí)配置了filters和proxyFilters,是組合關(guān)系涵紊,并非替換關(guān)系 |
application.yml
spring:
datasource:
username: root
password:
url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
#druid數(shù)據(jù)源專有配置
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
配置類
package com.young.springbootdata.config;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
import java.util.HashMap;
@Configuration
public class DruidConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource druidDataSource(){
return new DruidDataSource();
}
/**
* 后臺(tái)監(jiān)控
* springboot內(nèi)置了servlet容器,所以沒有web.xml,替代方法:ServletRegistrationBean
*/
@Bean
public ServletRegistrationBean statViewServlet(){
ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
//后臺(tái)需要有人登陸,賬號(hào)密碼設(shè)置
HashMap<String, String> initParameters = new HashMap<>(16);
//增加配置
//登錄key是固定的,loginUsername,loginPassword
initParameters.put("loginUsername","admin");
initParameters.put("loginPassword","123456");
//允許誰(shuí)可以訪問
initParameters.put("allow","");
//設(shè)置初始化參數(shù)
bean.setInitParameters(initParameters);
return bean;
}
}