前言
對(duì)于數(shù)據(jù)訪問(wèn)層,無(wú)論是Sql還是NoSql悲敷,SpringBoot默認(rèn)采用整合SpringData的方式進(jìn)行統(tǒng)一管理屎暇,添加大量的自動(dòng)配置囚巴,屏蔽了很多設(shè)置您炉。引入了各種XxxTemplate和XxxRepository來(lái)簡(jiǎn)化我們隊(duì)數(shù)據(jù)訪問(wèn)層的操作柒爵。
springboot2.0默認(rèn)是用com.zaxxer.hikari.HikariDataSource作為數(shù)據(jù)源。
2.0以下默認(rèn)采用的是org.apache.tomcat.jdbc.pool.DataSource作為數(shù)據(jù)源赚爵。
Hikari的官方網(wǎng)站:http://brettwooldridge.github.io/HikariCP/
Hikari號(hào)稱JAVA領(lǐng)域中最快的數(shù)據(jù)連接池棉胀,你可去點(diǎn)連接進(jìn)去看看,第一行就是說(shuō)他自己多么厲害冀膝,秒殺什么什么的唁奢,不過(guò)再快我也覺(jué)得沒(méi)有阿里巴巴奉獻(xiàn)給apache的Druid好,因?yàn)榘⒗锇桶偷姆?wù)周到畸写,里面有監(jiān)控中心驮瞧,可以幫助我們快速定位慢sql等。
Druid官方網(wǎng)站:http://druid.io/
為什么HikariCP被號(hào)稱為性能最好的Java數(shù)據(jù)庫(kù)連接池枯芬,如何配置使用參考這篇博客:點(diǎn)擊
注意事項(xiàng):默認(rèn)情況下使用com.zaxxer.hikari.HikariDataSource獲取數(shù)據(jù)源時(shí)會(huì)拋出一個(gè)異常论笔。說(shuō)時(shí)區(qū)不對(duì),需要我們修改mysql的時(shí)區(qū):
SHOWVARIABLESLIKE'%time_zone%'SETGLOBALtime_zone="+8:00"
使用Druid數(shù)據(jù)源
Apache Druid(Incubating) - 面向列的分布式數(shù)據(jù)存儲(chǔ)千所,非常適合為交互式應(yīng)用程序提供動(dòng)力
雖然HikariDataSource性能非常高狂魔,但是阿里的druid數(shù)據(jù)源配有成套的數(shù)據(jù)源管理軟件,開發(fā)中使用的更多淫痰。
以往我們都是直接引入Druid的依賴:
com.alibabadruid1.1.12
但是面對(duì)這么火爆的springboot并沒(méi)有直接對(duì)Druid的啟動(dòng)器而是需要我們自己整合最楷,apache中4個(gè)月前已經(jīng)出了一套完美支持springboot的方案所以說(shuō)我們不使用上面的依賴而是使用:
源碼下載:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
com.alibabadruid-spring-boot-starter1.1.10
配置YML文件,具體的參數(shù)配置可以去官網(wǎng)看看:
spring:? datasource:#? 數(shù)據(jù)源基本配置? ? username:root? ? password:root? ? driver-class-name:com.mysql.jdbc.Driver? ? url:jdbc:mysql://localhost:3306/duid? ? type:com.alibaba.druid.pool.DruidDataSource#? 數(shù)據(jù)源其他配置? ? initialSize:5? ? minIdle:5? ? maxActive:20? ? maxWait:60000? ? timeBetweenEvictionRunsMillis:60000? ? minEvictableIdleTimeMillis:300000? ? validationQuery:SELECT1FROMDUAL? ? testWhileIdle:true? ? testOnBorrow:false? ? testOnReturn:false? ? poolPreparedStatements:true#? 配置監(jiān)控統(tǒng)計(jì)攔截的filters,去掉后監(jiān)控界面sql無(wú)法統(tǒng)計(jì)待错,'wall'用于防火墻? ? ? filters:stat,wall? ? maxPoolPreparedStatementPerConnectionSize:20? ? useGlobalDataSourceStat:true? ? connectionProperties:druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
雖然我們配置了druid連接池的其它屬性籽孙,但是不會(huì)生效。因?yàn)槟J(rèn)是使用的java.sql.Datasource的類來(lái)獲取屬性的火俄,有些屬性datasource沒(méi)有犯建。如果我們想讓配置生效,需要手動(dòng)創(chuàng)建Druid的配置文件瓜客。
@ConfigurationProperties(prefix ="spring.datasource")@BeanpublicDruidDataSourcedruidDataSource(){returnnewDruidDataSource();}
Druid的最強(qiáng)大之處在于它有著強(qiáng)大的監(jiān)控适瓦,可以監(jiān)控我們發(fā)送到數(shù)據(jù)庫(kù)的所有sql語(yǔ)句。方便我們后期排插錯(cuò)誤谱仪。
我們接著在DruidDataSource里面配置監(jiān)控中心:
/**? ? * 配置監(jiān)控服務(wù)器? ? *@return返回監(jiān)控注冊(cè)的servlet對(duì)象? ? *@authorSimpleWu? ? */@BeanpublicServletRegistrationBeanstatViewServlet(){? ? ? ? ServletRegistrationBean servletRegistrationBean =newServletRegistrationBean(newStatViewServlet(),"/druid/*");// 添加IP白名單servletRegistrationBean.addInitParameter("allow","127.0.0.1");// 添加IP黑名單玻熙,當(dāng)白名單和黑名單重復(fù)時(shí),黑名單優(yōu)先級(jí)更高servletRegistrationBean.addInitParameter("deny","127.0.0.1");// 添加控制臺(tái)管理用戶servletRegistrationBean.addInitParameter("loginUsername","SimpleWu");? ? ? ? servletRegistrationBean.addInitParameter("loginPassword","123456");// 是否能夠重置數(shù)據(jù)servletRegistrationBean.addInitParameter("resetEnable","false");returnservletRegistrationBean;? ? }/**? ? * 配置服務(wù)過(guò)濾器? ? *? ? *@return返回過(guò)濾器配置對(duì)象? ? */@BeanpublicFilterRegistrationBeanstatFilter(){? ? ? ? FilterRegistrationBean filterRegistrationBean =newFilterRegistrationBean(newWebStatFilter());// 添加過(guò)濾規(guī)則filterRegistrationBean.addUrlPatterns("/*");// 忽略過(guò)濾格式filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*,");returnfilterRegistrationBean;? ? }
配置完后我們啟動(dòng)springboot程序訪問(wèn):
http://localhost:8080/druid/ 就可以來(lái)到我們的登錄頁(yè)面面就是我們上面添加的控制臺(tái)管理用戶疯攒,我們可以在上面很好的看到運(yùn)行狀況嗦随,圖片就不貼了截圖挺麻煩的。
感謝您的閱讀敬尺,如果您覺(jué)得閱讀本文對(duì)您有幫助枚尼,請(qǐng)點(diǎn)一下“推薦”按鈕肌毅。本文歡迎各位轉(zhuǎn)載,但是轉(zhuǎn)載文章之后必須在文章頁(yè)面中給出作者和原文連接姑原。
學(xué)習(xí)是永無(wú)止境的。