日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

springboot学习进阶(二)----配置数据源

發(fā)布時(shí)間:2024/3/24 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springboot学习进阶(二)----配置数据源 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? 做Java開發(fā)的都知道,后臺(tái)就是要跟數(shù)據(jù)庫進(jìn)行打交道的,什么增刪改查什么排序分組索引,也不是本文的重點(diǎn),就不詳細(xì)述說了,但是怎么連接數(shù)據(jù)庫這個(gè)在配置數(shù)據(jù)庫的時(shí)候,是必須要清楚的。傳統(tǒng)的數(shù)據(jù)庫鏈接方式就是jdbc創(chuàng)建一個(gè)數(shù)據(jù)庫連接,然后執(zhí)行完sql操作之后再刪除,到現(xiàn)在使用了數(shù)據(jù)庫連接池,為什么使用數(shù)據(jù)庫連接池這里也不再闡述,網(wǎng)上有很多文章都有。

? ? 既然說到數(shù)據(jù)庫連接池,那么就列舉一下Java開發(fā)所常見的一些數(shù)據(jù)庫連接池,并分別給出每一個(gè)連接池的優(yōu)劣以及在spring boot中怎么配置連接的。

1、C3P0

開源的JDBC連接池,實(shí)現(xiàn)了數(shù)據(jù)源和JNDI綁定,支持JDBC3規(guī)范和JDBC2的標(biāo)準(zhǔn)擴(kuò)展。目前使用它的開源項(xiàng)目有Hibernate、Spring等。單線程,性能較差,適用于小型系統(tǒng),代碼600KB左右。

2、DBCP

由Apache開發(fā)的一個(gè)Java數(shù)據(jù)庫連接池項(xiàng)目, Jakarta commons-pool對象池機(jī)制,Tomcat使用的連接池組件就是DBCP。單獨(dú)使用dbcp需要3個(gè)包:common-dbcp.jar,common-pool.jar,common-collections.jar,預(yù)先將數(shù)據(jù)庫連接放在內(nèi)存中,應(yīng)用程序需要建立數(shù)據(jù)庫連接時(shí)直接到連接池中申請一個(gè)就行,用完再放回。單線程,并發(fā)量低,性能不好,適用于小型系統(tǒng)。

3、Tomcat jdbc pool

Tomcat在7.0以前都是使用common-dbcp做為連接池組件,但是dbcp是單線程,為保證線程安全會(huì)鎖整個(gè)連接池,性能較差,dbcp有超過60個(gè)類,也相對復(fù)雜。Tomcat從7.0開始引入了新增連接池模塊叫做Tomcat jdbc pool,基于Tomcat JULI,使用Tomcat日志框架,完全兼容dbcp,通過異步方式獲取連接,支持高并發(fā)應(yīng)用環(huán)境,超級(jí)簡單核心文件只有8個(gè),支持JMX,支持XA Connection。

4、BoneCP

官方說法BoneCP是一個(gè)高效、免費(fèi)、開源的Java數(shù)據(jù)庫連接池實(shí)現(xiàn)庫。設(shè)計(jì)初衷就是為了提高數(shù)據(jù)庫連接池性能,根據(jù)某些測試數(shù)據(jù)顯示,BoneCP的速度是最快的,要比當(dāng)時(shí)第二快速的連接池快25倍左右,完美集成到一些持久化產(chǎn)品如Hibernate和DataNucleus中。BoneCP特色:高度可擴(kuò)展,快速;連接狀態(tài)切換的回調(diào)機(jī)制;允許直接訪問連接;自動(dòng)化重置能力;JMX支持;懶加載能力;支持XML和屬性文件配置方式;較好的Java代碼組織,100%單元測試分支代碼覆蓋率;代碼40KB左右。

5、Druid

Druid是Java語言中最好的數(shù)據(jù)庫連接池,Druid能夠提供強(qiáng)大的監(jiān)控和擴(kuò)展功能,是一個(gè)可用于大數(shù)據(jù)實(shí)時(shí)查詢和分析的高容錯(cuò)、高性能的開源分布式系統(tǒng),尤其是當(dāng)發(fā)生代碼部署、機(jī)器故障以及其他產(chǎn)品系統(tǒng)遇到宕機(jī)等情況時(shí),Druid仍能夠保持100%正常運(yùn)行。主要特色:為分析監(jiān)控設(shè)計(jì);快速的交互式查詢;高可用;可擴(kuò)展;Druid是一個(gè)開源項(xiàng)目,源碼托管在github上。

6、HikariCP

hikariCP是最近才開始接觸到的一個(gè)數(shù)據(jù)庫連接池,聽說是在boneCP的基礎(chǔ)上做了重新的優(yōu)化。性能分析如下:

  • HikariCP通過優(yōu)化(concurrentBag,fastStatementList )集合來提高并發(fā)的讀寫效率。

  • HikariCP使用threadlocal緩存連接及大量使用CAS的機(jī)制,最大限度的避免lock。單可能帶來cpu使用率的上升。

  • 從字節(jié)碼的維度優(yōu)化代碼。 (default inline threshold for a JVM running the server Hotspot compiler is 35 bytecodes )讓方法盡量在35個(gè)字節(jié)碼一下,來提升jvm的處理效率。

通過一張對比表格分析各個(gè)數(shù)據(jù)庫連接池的特點(diǎn):

功能C3P0DBCPTomcat jdbc poolBoneCPDruidHikariCP
線程同步單線程單線程多線程、異步多線程、異步多線程、異步多線程、異步
PSCache支持支持支持支持支持
LRU
ExceptionSorter
監(jiān)控jmx、logjmxjmxjmxjmx、log、httpjmx
可擴(kuò)展性較好
連接池管理隊(duì)列

? LinkedBlockingDeque

? FIFO隊(duì)列、FILO堆棧

FairBlockingQueue堆棧

數(shù)組、

CopyOnWriteArrayList

threadloacl、

CopyOnWriteArrayList

代碼復(fù)雜度復(fù)雜中等,超過60個(gè)類簡單,8個(gè)核心類簡單,40kb中等簡單
更新維護(hù)
開源項(xiàng)目集成

spring、

hibernate

tomcat組件Tomcat7以后

hibernate、

DataNucleus

Druid

??

LRU

LRU是一個(gè)性能關(guān)鍵指標(biāo),特別Oracle,每個(gè)Connection對應(yīng)數(shù)據(jù)庫端的一個(gè)進(jìn)程,如果數(shù)據(jù)庫連接池遵從LRU,有助于數(shù)據(jù)庫服務(wù)器優(yōu)化,這是重要的指標(biāo)。在測試中,Druid、DBCP、Proxool、JBoss是遵守LRU的。BoneCP、C3P0則不是。BoneCP在mock環(huán)境下性能可能好,但在真實(shí)環(huán)境中則就不好了。

PSCache

PSCache是數(shù)據(jù)庫連接池的關(guān)鍵指標(biāo)。在Oracle中,類似SELECT NAME FROM USER WHERE ID = ?這樣的SQL,啟用PSCache和不啟用PSCache的性能可能是相差一個(gè)數(shù)量級(jí)的。Proxool是不支持PSCache的數(shù)據(jù)庫連接池,如果你使用Oracle、SQL Server、DB2、Sybase這樣支持游標(biāo)的數(shù)據(jù)庫,那你就完全不用考慮Proxool。

ExceptionSorter

ExceptionSorter是一個(gè)很重要的容錯(cuò)特性,如果一個(gè)連接產(chǎn)生了一個(gè)不可恢復(fù)的錯(cuò)誤,必須立刻從連接池中去掉,否則會(huì)連續(xù)產(chǎn)生大量錯(cuò)誤。這個(gè)特性,目前只有JBossDataSource和Druid實(shí)現(xiàn)。Druid的實(shí)現(xiàn)參考自JBossDataSource。

監(jiān)控

DruidDataSource自身提供有NotEmptyWaitCount、PSCahcheHitCount等有用的監(jiān)控屬性,通過配置StatFilter能夠監(jiān)控SQL的執(zhí)行情況。

?

? ? 在了解了常用的數(shù)據(jù)庫連接池之后,我們再來研究一下,spring boot怎么集成這些數(shù)據(jù)庫連接池的。(注:因幾個(gè)連接池已經(jīng)不再更新維護(hù),而Tomcat Jdbc Pool一般不會(huì)用于Java項(xiàng)目連接池,因此此處我們只做druid跟HikariCP連接池的配置使用)

?

一、使用druid連接mysql

在項(xiàng)目的pom文件中添加mysql及druid的相關(guān)依賴(mysql依賴添加的時(shí)候,需要注意一下跟自己的版本匹配)

<!-- druid連接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.12</version></dependency><!-- mysql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.17</version></dependency>

在spring boot中添加相關(guān)properties配置

# mysqlspring.datasource.type=com.alibaba.druid.pool.DruidDataSourcespring.datasource.url=jdbc:mysql://127.0.0.1:3306/boot?useUnicode=true&characterEncoding=UTF-8&useSSL=falsespring.datasource.driverClassName=com.mysql.jdbc.Driverspring.datasource.username=rootspring.datasource.password=123456# DataSourcespring.datasource.initialSize=1spring.datasource.minIdle=1spring.datasource.maxActive=20spring.datasource.maxWait=60000spring.datasource.validationQuery=SELECT 1 FROM DUALspring.datasource.testOnBorrow=falsespring.datasource.testOnReturn=falsespring.datasource.testWhileIdle=truespring.datasource.minEvictableIdleTimeMillis=25200000spring.datasource.timeBetweenEvictionRunsMillis=60000spring.datasource.removeAbandoned=truespring.datasource.removeAbandonedTimeout=1800spring.datasource.poolPreparedStatements=truespring.datasource.maxPoolPreparedStatementPerConnectionSize=20spring.datasource.logAbandoned=truespring.datasource.filters=stat,wall?

啟動(dòng)項(xiàng)目,然后訪問http://localhost:9000/druid/index.html,druid連接池就配置好了

?

二、使用HikariCP連接池

因?yàn)閟pring boot2默認(rèn)使用的是hikariCP作為連接池,所以版本在2以上的可以省略maven依賴,直接在配置文件中加入如下配置信息即可

# jdbc_config datasource spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull spring.datasource.username=root spring.datasource.password=root # Hikari will use the above plus the following to setup connection pooling spring.datasource.type=com.zaxxer.hikari.HikariDataSource spring.datasource.hikari.minimum-idle=5 spring.datasource.hikari.maximum-pool-size=15 spring.datasource.hikari.auto-commit=true spring.datasource.hikari.idle-timeout=30000 spring.datasource.hikari.pool-name=DatebookHikariCP spring.datasource.hikari.max-lifetime=1800000 spring.datasource.hikari.connection-timeout=30000 spring.datasource.hikari.connection-test-query=SELECT 1

?

本文參考網(wǎng)址:

1、https://www.toutiao.com/a6551532416505217539/?tt_from=mobile_qq&utm_campaign=client_share&timestamp=1526087841&app=news_article&utm_source=mobile_qq&iid=32174471432&utm_medium=toutiao_android

2、https://blog.csdn.net/a1178016652/article/details/45027619

3、https://blog.csdn.net/moshowgame/article/details/80304198

4、http://www.cnblogs.com/liaojie970/p/9106187.html

總結(jié)

以上是生活随笔為你收集整理的springboot学习进阶(二)----配置数据源的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。