日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

玩轉SpringBoot中的那些連接池(小結)

瀏覽:20日期:2023-04-03 08:08:50

回想起前幾天在部署springboot項目到正線時,線上環境要求jdk7,可項目是基于jdk8開發的,springboot也是用的springboot2以上的版本,可以說縫縫補補一整天才搞好能滿足線上環境的代碼,搞完后當然需要小小的了解一下背后的秘密。

好了,話不多說,我們直接進入正題。

其實切換還不算太麻煩,坑就坑在SpringBoot2切換到SpringBoot1后,默認使用的連接池發生了變化,之前做的壓力測試又重新搞了一遍。

玩轉SpringBoot中的那些連接池(小結)

怨天尤人貌似消極了哈,小編我可是一個正能量滿滿的人,所以總結下自己就是:雖然會用,但是沒了解技術背后的真相而鬧出的烏龍。

接下里我們就一起來檢驗下SpringBoot2和SpringBoot1使用的默認數據源吧!

一、SpringBoot2的HikariCP

首先在pom文件中需要引入的依賴包:

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <mybatis.spring.boot.version>1.3.1</mybatis.spring.boot.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis.spring.boot.version}</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies>

其次在配置文件中需要定義如下屬性(不定義時會自動使用默認值)

# spring的相關配置spring: application: name: HikariCP測試 # 數據源的配置 datasource: # 連接池的配置 type: com.zaxxer.hikari.HikariDataSource hikari: minimum-idle: 5 maximum-pool-size: 15 connection-test-query: SELECT 1 max-lifetime: 1800000 connection-timeout: 30000 pool-name: DatebookHikariCP

配置好后,啟動成功時你能看到類似這樣子的打印信息:

2020-01-16 16:23:12.911 INFO 9996 --- [ main ] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup2020-01-16 16:23:12.913 INFO 9996 --- [ main ] o.s.j.e.a.AnnotationMBeanExporter : Bean with name ’dataSource’ has been autodetected for JMX exposure2020-01-16 16:23:12.924 INFO 9996 --- [ main ] o.s.j.e.a.AnnotationMBeanExporter : Located MBean ’dataSource’: registering with JMX server as MBean [com.zaxxer.hikari:name=dataSource,type=HikariDataSource]2020-01-16 16:23:12.994 INFO 9996 --- [ main ] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 18001 (http) with context path ’’2020-01-16 16:23:13.002 INFO 9996 --- [ main ] c.j.mmzsblog.DatasourceTestApplication : Started DatasourceTestApplication in 6.724 seconds (JVM running for 8.883)

其中第3行[com.zaxxer.hikari:name=dataSource,type=HikariDataSource]這部分就點明了使用的連接池類型

二、SpringBoot1的tomcat-jdbc

降低版本后,我沒有看到上面的信息打印,一時差點不知道使用了什么連接池,不過網上都說是tomcat-jdbc;但是相信眼見為實的我,肯定要在哪里打印一下才放心,于是乎,我進行了如下操作:

搞了一個controller來簡單的打印一下連接池的信息

@RestControllerpublic class testController { @Resource private DataSource dataSource; @GetMapping('/query') public void query(){ System.out.println('查詢到的數據源連接池信息是:'+dataSource); System.out.println('查詢到的數據源連接池類型是:'+dataSource.getClass()); System.out.println('查詢到的數據源連接池名字是:'+dataSource.getPoolProperties().getName()); }}

然后我就看到了如下的打印信息,果真是用的tomcat-jdbc

查詢到的數據源連接池信息是:org.apache.tomcat.jdbc.pool.DataSource@181d8899{ConnectionPool[defaultAutoCommit=null; defaultReadOnly=null; defaultTransactionIsolation=-1; defaultCatalog=null; driverClassName=com.mysql.jdbc.Driver; maxActive=100; maxIdle=100; minIdle=10; initialSize=10; maxWait=30000; testOnBorrow=true; testOnReturn=false; timeBetweenEvictionRunsMillis=5000; numTestsPerEvictionRun=0; minEvictableIdleTimeMillis=60000; testWhileIdle=false; testOnConnect=false; password=********; url=jdbc:mysql://localhost:3306/xxxxxx; username=xxxx; validationQuery=SELECT 1; validationQueryTimeout=-1; validatorClassName=null; validationInterval=3000; accessToUnderlyingConnectionAllowed=true; removeAbandoned=false; removeAbandonedTimeout=60; logAbandoned=false; connectionProperties=null; initSQL=null; jdbcInterceptors=null; jmxEnabled=true; fairQueue=true; useEquals=true; abandonWhenPercentageFull=0; maxAge=0; useLock=false; dataSource=null; dataSourceJNDI=null; suspectTimeout=0; alternateUsernameAllowed=false; commitOnReturn=false; rollbackOnReturn=false; useDisposableConnectionFacade=true; logValidationErrors=false; propagateInterruptState=false; ignoreExceptionOnPreLoad=false; useStatementFacade=true; }

查詢到的數據源連接池類型是:class org.apache.tomcat.jdbc.pool.DataSource

查詢到的數據源連接池名字是:Tomcat Connection Pool[1-1715657818]

其實,我們從pom文件也能看出其中的門道:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>

依賴文件中的這一個依賴其實就是表明了SpringBoot1使用的是tomcat-jdbc連接池。

哎,現在才知道SpringBoot2.0和SpringBoot1.0版本使用的默認數據庫是不一樣的。

現在原因是找到了,可是如何解決呢?要不然把SpringBoot1版本的默認連接池修改成和SpringBoot2版本的一樣。好,有了想法,那就開干。

玩轉SpringBoot中的那些連接池(小結)

其實,在SpringBoot1的版本也是可以使用HikariCP連接池的,操作就是:

首先引入默認配置的數據源處排除掉tomcat-jdbc

<!--配置默認數據源 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> <exclusions><!-- 排除默認的tomcat-jdbc數據源 --><exclusion> <groupId>org.apache</groupId> <artifactId>tomcat-jdbc</artifactId></exclusion> </exclusions> </dependency> <!-- 引用SpringBoot2默認的HikariCP數據源 --> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>3.3.1</version> </dependency>

再在.yml文件中配置HikariCP數據源的相關信息

# spring的相關配置spring: # 數據源的配置 datasource: # 連接池的配置 type: com.zaxxer.hikari.HikariDataSource hikari: minimum-idle: 5 maximum-pool-size: 15 connection-test-query: SELECT 1 max-lifetime: 1800000 connection-timeout: 30000

為什么說我此處要將數據源切換成SpringBoot2.0使用的默認數據源呢?因為使用SpringBoot1.0的tomcat-jdbc數據源我怕壓力測試出來達不到要求,為了不給測試增加工作壓力(小編我就是這么好的一個人)

玩轉SpringBoot中的那些連接池(小結)

所以我進行了上面的替換操作。

不過這樣做肯定也是有好處的。好處就在于HikariCP那迷人的優勢:

1、字節碼級別優化(很多方法通過JavaAssist生成)

2、大量小改進

用FastStatementList代替ArrayList 無鎖集合ConcurrentBag 代理類的優化(比如:,用invokestatic代替invokevirtual)

正如官網的這個對比圖顯示的一樣:它更快

玩轉SpringBoot中的那些連接池(小結)

其實話又說回來,要是我一開始就是用第三方數據庫,豈不是就不存在這些自己搞出來的幺蛾子了!

玩轉SpringBoot中的那些連接池(小結)

比如阿里巴巴的Druid連接池不就是個優秀的產品么!它到底有多優秀呢?你先看它的使用:

三、其它連接池(如:Druid)3.1、SpringBoot1.0中引用Druid

和前文的SpringBoot1.0中引用HikariCP一樣,先排除默認數據源tomcat-jdbc再引用想要使用的連接池

3.1.1、首先引入默認配置的數據源處排除掉tomcat-jdbc

<!--配置默認數據源 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> <exclusions><!-- 排除默認的tomcat-jdbc數據源 --><exclusion> <groupId>org.apache</groupId> <artifactId>tomcat-jdbc</artifactId></exclusion> </exclusions> </dependency> <!-- 引用阿里巴巴的druid數據源 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.31</version> </dependency>

3.1.2、再在.yml文件中配置Druid數據源的相關信息

spring: # 數據源的配置 datasource: # 連接池的配置 type: com.alibaba.druid.pool.DruidDataSourcedruid: initial-size: 5 max-active: 10 min-idle: 5 max-wait: 30000 pool-prepared-statements: true max-pool-prepared-statement-per-connection-size: 20 validation-query: SELECT 1 FROM DUAL validation-query-timeout: 60000 test-on-borrow: false test-on-return: false test-while-idle: true time-between-eviction-runs-millis: 60000 min-evictable-idle-time-millis: 100000

3.1.3、再寫個配置類加載數據源

@Configuration@ConditionalOnClass(DruidDataSource.class)@ConditionalOnProperty(name = 'spring.datasource.type', havingValue = 'com.alibaba.druid.pool.DruidDataSource', matchIfMissing = true)public class DataSourceConfig { @Bean @ConfigurationProperties('spring.datasource.druid') public DataSource dataSourceOne() { return DruidDataSourceBuilder.create().build(); }}

3.1.4、啟動效果:

2020-01-17 16:59:32.804 INFO 8520 --- [ main ] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup2020-01-17 16:59:32.806 INFO 8520 --- [ main ] o.s.j.e.a.AnnotationMBeanExporter : Bean with name ’dataSourceOne’ has been autodetected for JMX exposure2020-01-17 16:59:32.808 INFO 8520 --- [ main ] o.s.j.e.a.AnnotationMBeanExporter : Bean with name ’statFilter’ has been autodetected for JMX exposure2020-01-17 16:59:32.818 INFO 8520 --- [ main ] o.s.j.e.a.AnnotationMBeanExporter : Located MBean ’dataSourceOne’: registering with JMX server as MBean [com.alibaba.druid.spring.boot.autoconfigure:name=dataSourceOne,type=DruidDataSourceWrapper]2020-01-17 16:59:32.822 INFO 8520 --- [ main ] o.s.j.e.a.AnnotationMBeanExporter : Located MBean ’statFilter’: registering with JMX server as MBean [com.alibaba.druid.filter.stat:name=statFilter,type=StatFilter]2020-01-17 16:59:32.932 INFO 8520 --- [ main ] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 18001 (http)2020-01-17 16:59:32.943 INFO 8520 --- [ main ] c.j.mmzsblog.DatasourceTestApplication : Started DatasourceTestApplication in 8.328 seconds (JVM running for 10.941)

3.2、SpringBoot2.0中引用Druid

在SpringBoot2.0中引用Druid和在SpringBoot1.0中引入類似;

3.2.1、不需要排除默認配置的數據源,直接引入置Druid數據源

<!-- 引用阿里巴巴的druid數據源 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.31</version> </dependency>

3.2.2、在.yml文件中配置的Druid數據源的相關信息同3.1.3一樣

3.2.3、再寫個配置類加載數據源同3.1.3一樣

3.2.4、啟動后你同樣能看到打印出類似的信息

Located MBean ’dataSourceOne’: registering with JMX server as MBean [com.alibaba.druid.spring.boot.autoconfigure:name=dataSourceOne,type=DruidDataSourceWrapper]

3.3、優秀在哪?

看了上面的使用,超級簡單又木有?

首先我們看看druid官網給出的幾個傳統連接池之間的對比吧:

玩轉SpringBoot中的那些連接池(小結)

從上表可以看出,Druid連接池在性能、監控、診斷、安全、擴展性這些方面遠遠超出競品。

官網是這樣介紹它的:

Druid連接池是阿里巴巴開源的數據庫連接池項目。Druid連接池為監控而生,內置強大的監控功能,監控特性不影響性能。功能強大,能防SQL注入,內置Loging能診斷Hack應用行為。

所以,小編我倒騰了這么久,想明白了一件事,我以后還是用阿里爸爸的Druid連接池吧,接入簡單,還自帶監控,并且它可是經過阿里巴巴各大系統考驗過的產品,值得信賴,省事省心啊。

玩轉SpringBoot中的那些連接池(小結)

參考:

1:HikariCP的優點:https://www.jianshu.com/p/129efe2c8e49

2、druid官網:https://github.com/alibaba/druid/

到此這篇關于玩轉SpringBoot中的那些連接池(小結)的文章就介紹到這了,更多相關SpringBoot 連接池內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品日韩一区| 精品国产欧美| 一区二区国产精品| 国产精品久久观看| 青青久久av| 亚洲精品一区二区在线看| 欧美日韩精品一区二区视频| 在线亚洲国产精品网站| 伊人久久婷婷| 中文字幕日韩亚洲| 欧美日韩亚洲一区在线观看| 亚洲毛片在线| 国产欧美91| 国产欧美一区二区三区精品酒店| 日韩1区2区| 免费人成在线不卡| 欧美国产先锋| 欧美自拍一区| 国产精品主播在线观看| 91精品丝袜国产高跟在线| 国产三级一区| 久久男人av| 亚洲精品91| 亚洲精品看片| 久久久精品日韩| 在线国产一区二区| 一级成人国产| 久久伊人国产| 久久精品影视| 91成人福利| 久久国产影院| 国产精品2区| 久久美女性网| 久久免费影院| 日韩精品免费观看视频| 欧美片第1页| 亚洲精品福利| 岛国av免费在线观看| 日韩激情中文字幕| 99在线|亚洲一区二区| 中文字幕av一区二区三区人| 久久99蜜桃| 最新国产精品视频| 精品国产一级| 青青在线精品| 亚洲欧美在线专区| 久久伦理在线| 日韩电影免费网址| 国产精品videossex久久发布| 亚洲二区在线| 日韩欧美二区| 毛片在线网站| 九九久久国产| 青青草精品视频| 91欧美极品| 久久av影院| 蜜桃一区二区三区在线观看| 女人天堂亚洲aⅴ在线观看| 成人看片网站| 久久精品卡一| 亚洲精选久久| 婷婷五月色综合香五月| 亚洲一级大片| 亚洲精品高潮| 国产精品亚洲综合在线观看| 久久超级碰碰| 国产va在线视频| 欧美一区二区三区久久精品| 91麻豆精品| 国产欧美一区二区三区精品观看| 麻豆传媒一区二区三区| 中文不卡在线| 亚洲欧美日本视频在线观看| 欧美日韩国产精品一区二区亚洲| 亚洲福利精品| 免费久久久久久久久| 欧美中文日韩| 亚洲欧美视频| 蜜乳av另类精品一区二区| 老司机精品久久| 激情久久99| 人人爱人人干婷婷丁香亚洲| 亚洲另类黄色| 首页国产欧美日韩丝袜| 欧美日韩视频| 亚洲特色特黄| 久久青草久久| 国产精品激情电影| 国产伦精品一区二区三区视频 | 国产伦精品一区二区三区视频| 国产精品亲子伦av一区二区三区| 91精品亚洲| 尤物tv在线精品| 亚洲精品三级| 999久久久免费精品国产| 欧美精品三级在线| 亚洲精品在线影院| 欧美影院视频| 三上悠亚国产精品一区二区三区| 国产精品久久国产愉拍| 婷婷综合激情| 日本欧美国产| 亚洲精品综合| 欧洲av不卡| 国产精品视频一区二区三区四蜜臂 | 亚洲一区二区三区高清不卡| 日韩精品免费一区二区夜夜嗨 | 欧美一区久久久| 国内亚洲精品| 精品国产成人| 中文一区二区| 免费在线观看不卡| 国产亚洲久久| 日本久久一区| 国内揄拍国内精品久久| 136国产福利精品导航网址| 亚洲欧美网站| 国产精品一区二区美女视频免费看| 欧美国产三级| 婷婷成人在线| 久久免费福利| 国产精选久久| 国产综合亚洲精品一区二| 日韩精品水蜜桃| 国产精品激情电影| 日本精品黄色| 中文字幕一区二区三区在线视频| 国产精品久久久久久久久久白浆 | 国产欧美大片| 国产精品成久久久久| 国产一区二区三区探花| 蜜臀a∨国产成人精品| 综合视频一区| 免费精品国产的网站免费观看| 亚洲一区二区网站| 久久激情五月激情| 欧美国产一级| 亚洲精选av| 久久99国产精品视频| 婷婷久久免费视频| 精品视频一区二区三区四区五区 | 国产农村妇女精品一区二区| 免播放器亚洲| 国产精品二区不卡| 伊人久久亚洲| 一区二区电影在线观看| 欧美福利一区| 日韩伦理一区| 97精品久久| 国产欧美日韩在线一区二区| 99re国产精品| 精品久久久久中文字幕小说| 欧美日韩中文| 欧美激情视频一区二区三区免费 | 九九九精品视频| 国产aa精品| 91福利精品在线观看| 午夜精品一区二区三区国产| 国产精品高清一区二区| 欧美偷窥清纯综合图区| 亚洲人成精品久久久| 亚洲欧美久久| 国产精选在线| 欧美91福利在线观看| 国产韩日影视精品| 亚洲福利国产| 欧美国产美女| 免费日韩成人| 国产一区丝袜| 国产精品久久久亚洲一区| 国产伦一区二区三区| 日韩.com| 亚洲激情婷婷| 免费亚洲婷婷| 亚州国产精品| 99精品小视频| 亚洲涩涩av| 国产亚洲高清视频| 日本在线视频一区二区| 欧美欧美黄在线二区| 国产欧美日韩亚洲一区二区三区| 中文一区一区三区免费在线观| 91成人精品在线| 影音先锋久久| 国产aa精品| 亚洲精品91| 欧洲激情综合| 欧美国产专区| 欧美1区2区3区| 999国产精品| 婷婷综合电影| 日本综合视频| 国产成人77亚洲精品www| 五月天久久网站| 综合在线一区| 麻豆网站免费在线观看| 国产成人1区| 日本一区二区高清不卡| 99精品在线| 国产精品久久久久久妇女|