依赖文件中的这一个依赖其实就是表明了SpringBoot1使用的是tomcat-jdbc连接池。
哎,现在才知道SpringBoot2.0和SpringBoot1.0版本使用的默认数据库是不一样的。
现在原因是找到了,可是如何解决呢?要不然把SpringBoot1版本的默认连接池修改成和SpringBoot2版本的一样。好,有了想法,那就开干。
其实,在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数据源我怕压力测试出来达不到要求,为了不给测试增加工作压力(小编我就是这么好的一个人)
所以我进行了上面的替换操作。
不过这样做肯定也是有好处的。好处就在于HikariCP那迷人的优势:
- 1、字节码级别优化(很多方法通过JavaAssist生成)
- 2、大量小改进
- 用FastStatementList代替ArrayList
- 无锁集合ConcurrentBag
- 代理类的优化(比如:,用invokestatic代替invokevirtual)
正如官网的这个对比图显示的一样:它更快
其实话又说回来,要是我一开始就是用第三方数据库,岂不是就不存在这些自己搞出来的幺蛾子了!
比如阿里巴巴的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.DruidDataSource
druid:
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 startup
2020-01-17 16:59:32.806 INFO 8520 --- [ main ] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'dataSourceOne' has been autodetected for JMX exposure
2020-01-17 16:59:32.808 INFO 8520 --- [ main ] o.s.j.e.a.AnnotationMBeanExporter : Bean with name 'statFilter' has been autodetected for JMX exposure
2020-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官网给出的几个传统连接池之间的对比吧:
从上表可以看出,Druid连接池在性能、监控、诊断、安全、扩展性这些方面远远超出竞品。
官网是这样介绍它的:
Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。功能强大,能防SQL注入,内置Loging能诊断Hack应用行为。
总结
本文从基础到高级再到实战,由浅入深,把MySQL讲的清清楚楚,明明白白,这应该是我目前为止看到过最好的有关MySQL的学习笔记了,我相信如果你把这份笔记认真看完后,无论是工作中碰到的问题还是被面试官问到的问题都能迎刃而解!
重要的事:需要领取完整版的MySQL学习笔记的话,请转发+关注后点这里免费获取到免费的下载方式!
MySQL50道高频面试题整理:
MySQL讲的清清楚楚,明明白白,这应该是我目前为止看到过最好的有关MySQL的学习笔记了,我相信如果你把这份笔记认真看完后,无论是工作中碰到的问题还是被面试官问到的问题都能迎刃而解!
重要的事:需要领取完整版的MySQL学习笔记的话,请转发+关注后点这里免费获取到免费的下载方式!
MySQL50道高频面试题整理: