当前位置:首页 > 应用开发

细数 SpringBoot 中的连接池

 这是细数Java极客技术的第312篇原创文章

hello~各位读者新年好,我是连接鸭血粉丝(大家会亲切的喊我「阿粉」),是细数一位喜欢吃鸭血粉丝的程序员!

回想起前几天在部署springboot项目到正线时,线上环境要求jdk7,连接可项目是细数基于jdk8开发的,springboot也是连接用的springboot2以上的版本,可以说缝缝补补一整天才搞好能满足线上环境的细数代码,搞完后当然需要小小的连接了解一下背后的秘密。

好了,细数话不多说,连接我们直接进入正题。细数

其实切换还不算太麻烦,连接坑就坑在SpringBoot2切换到SpringBoot1后,高防服务器细数默认使用的连接连接池发生了变化,之前做的细数压力测试又重新搞了一遍

怨天尤人貌似消极了哈,阿粉我可是一个正能量满满的人,所以总结下自己就是:虽然会用,但是没了解技术背后的真相而闹出的乌龙。

接下里我们就一起来检验下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 startup 2020-01-16 16:23:12.913  INFO 9996 --- [ main ] o.s.j.e.a.AnnotationMBeanExporter        : Bean with name dataSource has been autodetected for JMX exposure 2020-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来简单的打印一下连接池的信息

@RestController public 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=

分享到:

滇ICP备2023006006号-16