SpringBoot配置多数据源( 二 )

第五步,配置Jdbc Template 。前面提到过,只要开发者引入了spring-jdbc依赖,那么若开发者没有提供Jdbc Template实例时,SpringBoot默认会提供一个Jdbc Template实例 。但是现在是配置多数据源,因此这个Jdbc Template实例就需要开发者自己来提供了 。在config包内新建一个JdbcTemplateConfig类,用于返回需要的Jdbc Template实例,相应的代码为:
@Configurationpublic class JdbcTemplateConfig {@Beanpublic JdbcTemplate jdbcTemplateOne(@Qualifier("dsOne")DataSource dataSource){return new JdbcTemplate(dataSource);}@Beanpublic JdbcTemplate jdbcTemplateTwo(@Qualifier("dsTwo")DataSource dataSource){return new JdbcTemplate(dataSource);}}简单解释一下上述代码的含义:

  • JdbcTemplateConfig类中提供了两个JdbcTemplate实例,每一个JdbcTemplate实例都需要提供DataSource,由于Spring容器中有两个DataSource实例,因此需要通过方法名来查找 。@Qualifier注解表示查找不同名称的DataSource实例,并注入进来 。
第六步,创建Book实体类和BookController类 。新建pojo包,并在里面创建Book实体类,里面的代码为:
public class Book {private Integer id;private String name;private String author;//getter和setter方法}接着新建controller包,并在里面创建BookController类,里面的代码为:
@RestControllerpublic class BookController {@Resource(name="jdbcTemplateOne")JdbcTemplate jdbcTemplateOne;@Autowired@Qualifier(value=https://www.isolves.com/it/cxkf/kj/2022-05-27/"jdbcTemplateTwo")JdbcTemplate jdbcTemplateTwo;@GetMapping("/test")public void test(){String sql = "select * from book";List booksOne = jdbcTemplateOne.query(sql,new BeanPropertyRowMapper<>(Book.class));List booksTwo = jdbcTemplateTwo.query(sql,new BeanPropertyRowMapper<>(Book.class));System.out.println("booksOne>>>>>>"+booksOne);System.out.println("booksTwo>>>>>>"+booksTwo);}}简单解释一下上述代码的含义:
  • 注意这里没有定义Repository和Service层,而是直接将JdbcTemplate注入到了Controller中 。在Controller中注入两个不同的JdbcTemplate有两种方式:第一种,使用@Resource注解,并指明name属性,然后按照name进行装配,此时会根据实例名查找相应的实例进行注入 。第二种,使用@Autowried注解并结合@Qualifier注解,其实这种效果等同于使用@Resource注解 。
第七步,运行项目 。运行项目,在浏览器地址栏中输入http://localhost:8080/test,然后查看控制台的输出信息为:
booksOne>>>>>>[com.envy.jdbcmorespringboot.pojo.Book@166352ef]booksTwo>>>>>>[com.envy.jdbcmorespringboot.pojo.Book@11ed31ef]不方便查看,那就给Book实体类提供toString方法,之后再来运行一下:
booksOne>>>>>>[Book{id=1, name='西游记', author='吴承恩'}]booksTwo>>>>>>[Book{id=1, name='红楼梦', author='曹雪芹'}]对比一下数据库中的数据:
SpringBoot配置多数据源

文章插图
 
可以看到数据已经成功取出来了,这表明JdbcTemplate配置多数据源成功 。
Mybatis多数据源JdbcTemplate可以配置多数据源,同样Mybatis也是可以的,只是步骤就稍微复杂一些 。
第一步,创建数据库 。使用下面的SQL语句来手动创建两个数据库和表:
drop database if exists mybatisone;create database mybatisone;use mybatisone;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 mybatistwo;create database mybatistwo;use mybatistwo;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应用,名称为mybatismorespringboot,然后在pom.xml文件中添加如下依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--添加mybatis依赖--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version></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>


推荐阅读