您的位置 首页 > 数码极客

阿里druid如何使用、阿里放弃druid了吗…

前言

项目上新功能需要连接多个数据库,项目是用Spring Boot开发的,因为平时习惯了配置文件一把梭,所以花了点时间总结了一下Spring Boot项目配置多数据源的方法;

因为项目中常用JdbcTemplate和Mybatis,所以又研究了一下在多数据源的情况下的集成方法;

接着又心血来潮顺带了解了一下Spring Boot各版本默认的数据库连接池分别是什么;

最后我又对比了一下Spring Boot 2.x版本默认的HikariCP连接池与阿里开源的Druid连接池,总结了各自的特性以及适用场景。

目录

  1. Spring Boot如何配置多数据源?
  2. 多数据源的情况下如何集成JdbcTemplate和Mybatis?
  3. Spring Boot各版本默认的数据库连接池分别是什么?
  4. HikariCP与Druid,该如何选择?

Spring Boot如何配置多数据源?

Spring Boot推崇“约定大于配置”,当项目只需要连接一个数据库时,我们只需要在配置文件里简单配置上数据库连接信息就可使用。

但是当项目需要连接多个数据库时我们要怎么做呢?

操作步骤:

1、在配置文件中分别配置好两个数据库的连接信息:

2、新建一个Java配置类配置数据源信息:

  • @Configuration注解表明DatasourceConfig类是一个配置类;
  • 使用@Bean注解分别定义了名为firstDatasource和secondDatasource的两个bean;
  • 使用@ConfigurationProperties注解分别绑定配置文件中以和开头的属性;

多数据源的情况下如何集成JdbcTemplate和Mybatis?

在实际项目中我们操作数据库通常会使用封装好的工具或者ORM框架,这里我就以比较常用的JdbcTemplate和Mybatis为例,看一下在多数据源的情况该怎么集成。

集成JdbcTemplate

操作步骤:

1、首先看一下新建一个JdbcTemplate对象需要什么参数:

通过查看源码我们得知新建一个JdbcTemplate对象需要一个数据源DataSource参数。

2、新建一个Java配置类,用来配置JdbcTemplate信息:

  • 使用@Bean注解分别定义了名为firstJdbcTemplate和secondJdbcTemplate的两个bean;
  • 使用@Qualifier注解分别注入不同的数据源bean;

3、怎么使用这两个JdbcTemplate呢?

由于两个JdbcTemplate在同一个Spring容器中,所以在使用@Autowired注解注入bean时最好配合@Qualifier注解一起使用,或者可以直接使用@Resource注解并指定bean名称。


集成Mybatis

操作步骤:

1、使用Mybatis插件生成数据库表对应的Mapper文件和xml文件,分别存放到不同的目录下。

2、Mybatis中有一个十分重要的概念——SQLSessionFactory,它是配置Mybatis的关键所在:

几个关键点:

  • 通过@MapperScan注解配置需要扫描的Mapper文件的路径;
  • 创建SqlSessionFactory bean,并设置数据源、xml文件路径;
  • 创建数据源对应的事务控制器;
  • 创建一个SqlSessionTemplate bean(主要为了方便我们手动调用);

3、在多数据源的环境下直接调用Mapper并不需要额外的配置,正常注入Mapper接口就可以了。

特别注意:在通过Service层的方法来调用Mapper接口并且启用了事务管理的情况下,我们必须手动指明事务控制器的名称。

Spring Boot各版本默认的数据库连接池分别是什么?

因为项目中一直在使用阿里开源的Druid连接池,所以有点好奇Spring Boot默认使用的是什么连接池?

其实只要仔细观察,在启动项目的时候我们就可以看出点端倪:

可以看到:Spring Boot默认使用的数据库连接池叫HikariDataSource。

这个HikariDataSource是什么时候冒出来的?我决定去源码里寻找答案。

不知道从哪开始的话就从Spring Boot的核心配置文件文件开始吧,准没错!

果然发现了自动加载数据源的配置——DataSourceAutoConfiguration,进去看一下:

我发现该配置文件通过@Import注解导入了Hikari、Tomcat、Dbcp2、Generic(泛型)以及一个用于JMX监控的数据源配置。

再来看一下Hikari的配置:

由于Hikari的配置被放到了第一个位置,根据条件当容器中不存在DataSource类型的bean时,Spring Boot就会首先去尝试加载HikariDataSource,如果加载成功那么后面Tomcat、Dbcp2等都不会再去加载,这个加载逻辑正好也映证了上面Spring Boot默认使用的数据库连接池叫HikariDataSource的结论。

那么Spring Boot是从哪个版本开始将HikariDataSource作为默认的数据库连接池的呢?

对比一下Spring Boot 1.x的最后一个版本——1.5.22.RELEASE,DataSourceAutoConfiguration配置文件中排在首位的是Tomcat连接池:

也就是说Spring Boot 1.x版本默认使用的是Tomcat连接池,从2.0版本开始Spring Boot默认的数据库连接池换成了HikariCP。

HikariCP与Druid,该如何选择?

这个HikariCP能被Spring Boot官方选为默认数据库连接池,必定是有点东西的;而阿里开源的Druid同样是一个非常热门的数据库连接池,那么这两种连接池我们到底该怎么选择呢?

1、HikariCP

通过github上的项目主页我们可以看到HikariCP是一个非常热门的项目,目前有12.7K的star,HikariCP以简单、可靠、高性能的特性著称。

项目主页有一张HikariCP与其他几个连接池的性能对比图:

从图上可以看出HikariCP的性能确实比c3p0、dbcp2、tomcat等老牌连接池高出一大截!

Spring Boot官方选择HikariCP作为默认的数据库连接池也正是看中它的高性能特点吧。

2、Druid

Druid在github上有20.8K的star,项目主页介绍Druid是Java语言中最好的数据库连接池,内置强大的监控功能,监控特性不影响性能。功能强大,能防SQL注入,内置Loging能诊断Hack应用行为。

放一张Druid与其他主流连接池的对比图:

可以看到,从性能、稳定性、扩展、监控、安全等方面综合比较,Druid比其他连接池更优秀。

HikariCP追求的是极致的高性能,单从性能来讲可能比Druid更加优秀,如果项目追求极致的数据库连接性能,可以考虑HikariCP。

通常来讲,连接池本身的性能消耗在整个调用链路中占比不大,而是否支持LRU的方式重用、是否支持PSCache(PreparedStatementCache)才是连接池性能的关键点,这两方面Druid完胜HikariCP。

其次Druid连接池在阿里内部已经经过历年双十一超大规模并发验证,足以证明其稳定性。

此外Druid连接池本就是为监控而生,天生自带非常强大的监控功能,能采集非常完备的连接池执行信息,包括SQL执行、并发、慢查询、执行时间区间分布等,这对项目运维非常有用。

从实际应用场景考虑,我认为Druid连接池是一个更好的选择。


“分享干货,收获快乐”

我是一名Java程序员,喜欢我的文章欢迎 关注 及 转发,我会经常与大家分享工作当中的实用技巧与经验。

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“阿里druid如何使用,阿里放弃druid了吗,阿里druid使用教程,阿里Druid详解”边界阅读