SpringBoot配置多数据源

写在前面本篇来学习SpringBoot如何配置多数据源,所谓多数据源就是一个JAVA EE项目中采用了不同数据库实例中的多个库,或者是同一个数据库实例中的多个不同库 。一般来说,采用MyCat等分布式数据库中间件是比较好的解决方案,这样可以把数据库读写分离、分库分表、备份等操作交给中间件去做,这样Java代码只需要专注于业务即可 。不过这并不意味着无法使用Java代码解决类似的问题,在Spring Famework中就可以配置多个数据源,SpringBoot作为其中的佼佼者,自然也同样支持多数据源的配置,只是配置方式有些变化而已 。
下面就分别介绍使用Jdbc Template、Mybatis和SpringData JPA等不同持久层框架时的多数据源配置 。
Jdbc Template多数据源Jdbc Template多数据源配置是最简单的一个,因为一个Jdbc Template就对应一个DataSource,开发者只需要提供多个DataSource,再手动配置Jdbc Template即可 。具体配置如下: 第一步,创建数据库 。使用下面的SQL语句来手动创建两个数据库和表:
drop database if exists jdbcone;create database jdbcone;use jdbcone;drop table if exists book;create table book(id int(11) not null auto_increment comment 'id',name varchar(128) default null comment '名称',author varchar(64) default null comment '作者',primary key(id))ENGINE=INNODB default charset=utf8;insert into book(id,name,author)values(1,"西游记","吴承恩");drop database if exists jdbctwo;create database jdbctwo;use jdbctwo;drop table if exists book;create table book(id int(11) not null auto_increment comment 'id',name varchar(128) default null comment '名称',author varchar(64) default null comment '作者',primary key(id))ENGINE=INNODB default charset=utf8;insert into book(id,name,author)values(1,"红楼梦","曹雪芹");执行该SQL语句后,可以看出数据库中的信息如下所示:

SpringBoot配置多数据源

文章插图
 
第二步,创建SpringBoot项目并添加依赖 。使用spring Initializr构建工具构建一个SpringBoot的Web应用,名称为jdbcmorespringboot,然后在pom.xml文件中添加如下依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--添加jdbc依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!--添加数据库驱动依赖--><dependency><groupId>MySQL</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--添加数据库连接池依赖--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version></dependency>请注意这里添加的数据库连接池依赖是druid-spring-boot-starter 。druid-spring-boot-starter可以帮助开发者在SpringBoot项目中轻松集成Druid数据库连接池和监控 。
第三步,配置数据库连接 。在Application.properties配置文件中配置多个数据源的信息:
# 数据源1spring.datasource.one.type=com.alibaba.druid.pool.DruidDataSourcespring.datasource.one.url=jdbc:mysql://127.0.0.1:3306/jdbcone?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTCspring.datasource.one.username=rootspring.datasource.one.password=1234# 数据源2spring.datasource.two.type=com.alibaba.druid.pool.DruidDataSourcespring.datasource.two.url=jdbc:mysql://127.0.0.1:3306/jdbctwo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTCspring.datasource.two.username=rootspring.datasource.two.password=1234这里配置了两个数据源,主要区别是数据库不同,其他都是一样的 。 第四步,配置数据源 。新建一个config包,并在里面创建一个DataSourceConfig类,用于配置数据源,这样就可以根据application.properties文件来生成对应的DataSource 。里面的代码为:
@Configurationpublic class DataSourceConfig {@Bean@ConfigurationProperties("spring.datasource.one")public DataSource dsOne(){return DruidDataSourceBuilder.create().build();}@Bean@ConfigurationProperties("spring.datasource.two")public DataSource dsTwo(){return DruidDataSourceBuilder.create().build();}}简单解释一下上述代码的含义: