SpringBoot 集成 Druid

SpringBoot整合Druid完成MySQL數(shù)據(jù)訪問务傲,以及配置Druid監(jiān)控模塊整合蔫慧。

  1. 添加Druid依賴

    <!--alibaba druid datasource-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>${alibaba-druid.version}</version>
    </dependency>
    
  2. 添加配置

    # DataSource settings
    spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
    spring.datasource.url = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF8
    spring.datasource.username = root
    spring.datasource.password = root
    spring.datasource.driverClassName = com.mysql.jdbc.Driver
    #連接池的配置信息
    spring.datasource.initialSize=5
    spring.datasource.minIdle=5
    spring.datasource.maxActive=20
    # 配置獲取連接等待超時的時間
    spring.datasource.maxWait=60000
    # 配置間隔多久才進行一次檢測释涛,檢測需要關閉的空閑連接,單位是毫秒
    spring.datasource.timeBetweenEvictionRunsMillis=60000
    # 配置一個連接在池中最小生存的時間悠咱,單位是毫秒
    spring.datasource.minEvictableIdleTimeMillis=300000
    spring.datasource.validationQuery=SELECT 1 FROM DUAL
    spring.datasource.testWhileIdle=true
    spring.datasource.testOnBorrow=false
    spring.datasource.testOnReturn=false
    # 打開PSCache荣瑟,并且指定每個連接上PSCache的大小
    spring.datasource.poolPreparedStatements=true
    spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
    # 配置監(jiān)控統(tǒng)計攔截的filters,去掉后監(jiān)控界面sql無法統(tǒng)計足绅,'wall'用于防火墻
    spring.datasource.filters=stat,wall,log4j
    # 通過connectProperties屬性來打開mergeSql功能捷绑;慢SQL記錄
    spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
    
  3. 啟動項目,此時氢妈,SpringBoot已經(jīng)把Druid當做dataSource加載到了項目中了

  4. 開啟Druid監(jiān)控功能

    開啟監(jiān)控功能粹污,可以在應用運行的過程中,通過監(jiān)控提供的多維度數(shù)據(jù)來分析使用數(shù)據(jù)庫的運行情況首量,從而可以調整程序設計壮吩,以便于優(yōu)化數(shù)據(jù)庫的訪問性能进苍。

    @Configuration
    public class DruidConfiguration {
        @Value("${spring.datasource.url}")
        private String dbUrl;
        @Value("${spring.datasource.username}")
        private String username;
        @Value("${spring.datasource.password}")
        private String password;
        @Value("${spring.datasource.driver-class-name}")
        private String driverClassName;
        @Value("${spring.datasource.initialSize}")
        private int initialSize;
        @Value("${spring.datasource.minIdle}")
        private int minIdle;
        @Value("${spring.datasource.maxActive}")
        private int maxActive;
        @Value("${spring.datasource.maxWait}")
        private int maxWait;
        @Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
        private int timeBetweenEvictionRunsMillis;
        @Value("${spring.datasource.minEvictableIdleTimeMillis}")
        private int minEvictableIdleTimeMillis;
        @Value("${spring.datasource.validationQuery}")
        private String validationQuery;
        @Value("${spring.datasource.testWhileIdle}")
        private boolean testWhileIdle;
        @Value("${spring.datasource.testOnBorrow}")
        private boolean testOnBorrow;
        @Value("${spring.datasource.testOnReturn}")
        private boolean testOnReturn;
        @Value("${spring.datasource.poolPreparedStatements}")
        private boolean poolPreparedStatements;
        @Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}")
        private int maxPoolPreparedStatementPerConnectionSize;
        @Value("${spring.datasource.filters}")
        private String filters;
        @Value("{spring.datasource.connectionProperties}")
        private String connectionProperties;
    
        @Bean     //聲明其為Bean實例
        @Primary  //在同樣的DataSource中,首先使用被標注的DataSource
        public DataSource dataSource() {
            DruidDataSource datasource = new DruidDataSource();
            datasource.setUrl(this.dbUrl);
            datasource.setUsername(username);
            datasource.setPassword(password);
            datasource.setDriverClassName(driverClassName);
    
            //configuration
            datasource.setInitialSize(initialSize);
            datasource.setMinIdle(minIdle);
            datasource.setMaxActive(maxActive);
            datasource.setMaxWait(maxWait);
            datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
            datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
            datasource.setValidationQuery(validationQuery);
            datasource.setTestWhileIdle(testWhileIdle);
            datasource.setTestOnBorrow(testOnBorrow);
            datasource.setTestOnReturn(testOnReturn);
            datasource.setPoolPreparedStatements(poolPreparedStatements);
            datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
            try {
                datasource.setFilters(filters);
            } catch (SQLException e) {
                System.err.println("druid configuration initialization filter: " + e);
            }
            datasource.setConnectionProperties(connectionProperties);
            return datasource;
        }
    
        @Bean
        public ServletRegistrationBean statViewServle() {
            ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
            // IP白名單
            servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
            // IP黑名單(共同存在時鸭叙,deny優(yōu)先于allow)
            servletRegistrationBean.addInitParameter("deny", "192.168.1.100");
            //控制臺管理用戶
            servletRegistrationBean.addInitParameter("loginUsername", "druid");
            servletRegistrationBean.addInitParameter("loginPassword", "druid");
            //是否能夠重置數(shù)據(jù)
            servletRegistrationBean.addInitParameter("resetEnable", "false");
            return servletRegistrationBean;
        }
    
        @Bean
        public FilterRegistrationBean statFilter() {
            FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
            //添加過濾規(guī)則
            filterRegistrationBean.addUrlPatterns("/*");
            //忽略過濾的格式
            filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
            return filterRegistrationBean;
        }
    }
    
  5. 重啟項目,訪問 項目鏈接+/druid/login.html

    登陸頁面
    管理頁面
  6. 相關信息

    https://github.com/alibaba/druid

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末觉啊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子沈贝,更是在濱河造成了極大的恐慌杠人,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宋下,死亡現(xiàn)場離奇詭異嗡善,居然都是意外死亡,警方通過查閱死者的電腦和手機杨凑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門滤奈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人撩满,你說我怎么就攤上這事蜒程。” “怎么了伺帘?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵昭躺,是天一觀的道長。 經(jīng)常有香客問我伪嫁,道長领炫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任张咳,我火速辦了婚禮帝洪,結果婚禮上,老公的妹妹穿的比我還像新娘脚猾。我一直安慰自己葱峡,他們只是感情好,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布龙助。 她就那樣靜靜地躺著砰奕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪提鸟。 梳的紋絲不亂的頭發(fā)上军援,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天,我揣著相機與錄音称勋,去河邊找鬼胸哥。 笑死,一個胖子當著我的面吹牛铣缠,可吹牛的內容都是我干的烘嘱。 我是一名探鬼主播昆禽,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蝇庭!你這毒婦竟也來了醉鳖?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤哮内,失蹤者是張志新(化名)和其女友劉穎盗棵,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體北发,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡纹因,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了琳拨。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞭恰。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖狱庇,靈堂內的尸體忽然破棺而出惊畏,到底是詐尸還是另有隱情,我是刑警寧澤密任,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布颜启,位于F島的核電站,受9級特大地震影響浪讳,放射性物質發(fā)生泄漏缰盏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一淹遵、第九天 我趴在偏房一處隱蔽的房頂上張望口猜。 院中可真熱鬧,春花似錦透揣、人聲如沸暮的。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至猖腕,卻和暖如春拆祈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背倘感。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工放坏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人老玛。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓淤年,卻偏偏與公主長得像钧敞,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子麸粮,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理溉苛,服務發(fā)現(xiàn),斷路器弄诲,智...
    卡卡羅2017閱讀 134,651評論 18 139
  • 1. Java基礎部分 基礎部分的順序:基本語法愚战,類相關的語法,內部類的語法齐遵,繼承相關的語法寂玲,異常的語法,線程的語...
    子非魚_t_閱讀 31,622評論 18 399
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,803評論 6 342
  • springboot 自身提供了幾款數(shù)據(jù)庫連接池.但是對于阿里數(shù)據(jù)源并沒有提供,下面直接切入正題 配置 appli...
    PrimaryKeyEnoch閱讀 792評論 0 1
  • 顧子湄與蕭恒 一: 音樂大廳梗摇,流光溢彩拓哟,器樂紛呈,衣香鬢影伶授,一場盛大的頒獎典禮断序,激動人心的時刻,從世界匯聚經(jīng)過層層...
    雪千重閱讀 569評論 0 3