在开发的过程中我们可能都会遇到对接公司其他系统等需求,对于外部的系统可以采用接口对接的方式,对于一个公司开发的两个系统,并且知道相关数据库结构的情况下,就可以考虑使用多数据源来解决这个问题。SpringBoot为我们提供了相对简单的实现。

一、建立如下结构的maven项目


二、添加相关数据库配置信息

server:
port: 8080

spring:
datasource:
master:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: 123456
slaver:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/dev?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: 123456

三、主库和从库的相关配置
1、主库数据源配置

@Configuration
@MapperScan(basePackages = "com.somta.springboot.dao.master", sqlSessionTemplateRef = "masterSqlSessionTemplate")
public class MasterDataSourceConfiguration {

@Value("${spring.datasource.master.driver-class-name}")
private String driverClassName;

@Value("${spring.datasource.master.url}")
private String url;

@Value("${spring.datasource.master.username}")
private String username;

@Value("${spring.datasource.master.password}")
private String password;

@Bean(name = "masterDataSource")
@Primary
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(this.driverClassName);
dataSource.setUrl(this.url);
dataSource.setUsername(this.username);
dataSource.setPassword(this.password);
return dataSource;
}

@Bean(name = "masterSqlSessionFactory")
@Primary
public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mybatis/master/**/Mysql_*Mapper.xml"));
return bean.getObject();
}

@Bean(name = "masterTransactionManager")
@Primary
public DataSourceTransactionManager transactionManager(@Qualifier("masterDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}

@Bean(name = "masterSqlSessionTemplate")
@Primary
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("masterSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}

}

2、从库的数据源配置信息

@Configuration
@MapperScan(basePackages = "com.somta.springboot.dao.slaver", sqlSessionTemplateRef = "slaverSqlSessionTemplate")
public class SlaverDataSourceConfiguration {

@Value("${spring.datasource.slaver.driver-class-name}")
private String driverClassName;

@Value("${spring.datasource.slaver.url}")
private String url;

@Value("${spring.datasource.slaver.username}")
private String username;

@Value("${spring.datasource.slaver.password}")
private String password;

@Bean(name = "slaverDataSource")
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(this.driverClassName);
dataSource.setUrl(this.url);
dataSource.setUsername(this.username);
dataSource.setPassword(this.password);
return dataSource;
}

@Bean(name = "slaverSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("slaverDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mybatis/slaver/**/Mysql_*Mapper.xml"));
return bean.getObject();
}

@Bean(name = "slaverTransactionManager")
public DataSourceTransactionManager transactionManager(@Qualifier("slaverDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}

@Bean(name = "slaverSqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("slaverSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}

}

  注意在配置数据源的信息时,一定要通过@Primary配置一个主库,对于数据库配置部分与普通的数据源配置没有差异,新建一个DataSource,在创建一个SqlSessionTemplate,最后创建一个SqlSessionTemplate,分别以此注入即可,@MapperScan注解的扫描路径要分别对于相应的dao层

四、编写dao层和xml

public interface UserMasterDao {
int addUser(User user);
int deleteUserById(Long id);
int updateUserById(User user);
User queryUserById(Long id);
List<User> queryUserList();
}

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.somta.springboot.dao.master.UserMasterDao" >
<!-- Result Map-->
<resultMap id="BaseResultMap" type="com.somta.springboot.pojo.User" >
<result column="id" property="id"/>
<result column="name" property="name"/>
<result column="age" property="age"/>
</resultMap>

<!-- th_role_user table all fields -->
<sql id="Base_Column_List" >
id, name, age
</sql>

<insert id="addUser" parameterType="com.somta.springboot.pojo.User" >
insert into t_user (id, name, age)
values (#{id},#{name},#{age});
</insert>

<delete id="deleteUserById" parameterType="java.lang.Long">
delete from t_user where id=#{id}
</delete>

<update id="updateUserById" parameterType="com.somta.springboot.pojo.User" >
update t_user set
<trim suffixOverrides="," >
<if test="id != null and id != ''">
id=#{id},
</if>
<if test="name != null and name != ''">
name=#{name},
</if>
<if test="age != null and age != ''">
age=#{age},
</if>
</trim> where id=#{id}
</update>

<select id="queryUserById" resultMap="BaseResultMap" parameterType="java.lang.Long">
select <include refid="Base_Column_List" />
from t_user where id = #{id}
</select>

<select id="queryUserList" resultMap="BaseResultMap">
select <include refid="Base_Column_List" />
from t_user
</select>

</mapper>

五、编写测试类进行测试

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Application.class)
public class MultiDatasourceTest {
@Autowired
private UserMasterDao masterUserDao;
@Autowired
private UserSlaverDao slaverUserDao;
/**
* 查询用户
* @throws Exception
*/
@Test
public void testQueryUser() throws Exception {
User masterUser = masterUserDao.queryUserById(1L);
System.out.println("masterUser==>"+masterUser.getName());

User slaverUser = slaverUserDao.queryUserById(1L);
System.out.println("slaverUser==>"+slaverUser.getName());
}
}

当在控制台看到如下所示输出就代表我们的配置已经成功了


Git代码地址:https://gitee.com/Somta/SpringBoot/tree/master/SpringBoot-multiDatasource
原文地址:http://somta.com.cn/#/blog/view/05ef234aa6744aa4bc039869e2cfaffe
---------------------
作者:明天的地平线
来源:CSDN
原文:https://blog.csdn.net/husong_/article/details/80103497
版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://www.cnblogs.com/telwanggs/p/10791976.html

SpringBoot2.0之八 多数据源配置相关推荐

  1. SpringBoot2.0 jpa多数据源配置

    随着Springboot升级到2.0,原来1.5.x的Jpa多数据源配置不能用了.现在总结一下Springboot2.0的jpa多数据源配置 连接池还是用druid,但是不能用druid的starte ...

  2. SpringBoot2.0整合多数据源拆分

    前言 本文环境承接springboot2.0整合使用mybatis(数据访问篇) 一.什么是多数据源 公司分为两个数据库,一个数据库专门存放共同配置文件,一个数据库垂直业务数据库.垂直根据业务划分具体 ...

  3. SpringBoot2/SpringBoot/Java动态数据源配置、动态连接池配置、多数据源负载均衡

    Java动态数据源配置.动态连接池配置.多数据源负载均衡 大家好,今天给大家推荐一个自产的连接池插件.废话不多说,本文接口分为以下主题: 1. 插件开发背景: 2. 插件提供的能力: 3. 插件的使用 ...

  4. springboot2.0 的ssl证书配置

    当你不知道怎么做的时候,做什么都不知道从何下手... 看了很多前人的文章,终于找到了配置方法!自己记录一份自己配置留下的,才是自己的,打一针预防针! 我这个是在阿里云申请的ssl证书,申请的时候是绑定 ...

  5. springboot2.0 redis EnableCaching的配置和使用

    一.前言 关于EnableCaching最简单使用,个人感觉只需提供一个CacheManager的一个实例就好了.springboot为我们提供了cache相关的自动配置.引入cache模块,如下. ...

  6. SpringBoot2.0之六 多环境配置

    开发过程中面对不同的环境,例如数据库.redis服务器等的不同,可能会面临一直需要修改配置的麻烦中,在以前的项目中,曾通过Tomcat的配置来实现,有的项目甚至需要手动修改相关配置,这种方式费时费力, ...

  7. springboot2.0系列(二):配置属性

    为什么80%的码农都做不了架构师?>>>    前言 Spring Boot中核心思想:约定优于配置.那到底什么是约定优于配置? 约定优于配置(convention over con ...

  8. SpringBoot2.0配置redis相关

    2019独角兽企业重金招聘Python工程师标准>>> SpringBoot2.0中redis的配置 REDIS (RedisProperties) Redis数据库索引(默认为0) ...

  9. springboot2.0.5+jpa多数据源配置and注解形式多数据源切换

    1.首先配置数据源连接总装类DataSourcesConfig package com.cpic.dataSources;import org.springframework.beans.factor ...

最新文章

  1. 基于visual Studio2013解决算法导论之007优先队列(堆实现)
  2. 关于反射的完整 练习
  3. java pdf 文字_Java给pdf文件添加文字等信息
  4. Bailian2933 停车场收费【水题】
  5. 如何更高效地使用 OkHttp
  6. Kali最新2020.1版本之U盘启动加密与持久化存储制作流程
  7. Rigify:关于Rigify生成最终绑定时失败的原因及解决办法
  8. 能在学生用计算机的面上画的图画,小学生电脑绘画作品欣赏
  9. lol服务器维护补偿,LOL官方:服务器崩溃补偿!全服再次免费赠送皮肤一款!
  10. 快速将非Word中的不可编辑的公式转换为Word文档中公式编辑器里可编辑的公式的办法
  11. 开放平台设计方案与实践
  12. Python pyspider的安装
  13. android轻量级数据存储框架Hawk
  14. CDS View_01
  15. 哈工大形式语言与自动机2022期末试题
  16. Android在app中打开另一个app
  17. POI生成Excel
  18. Linux 之十七 Ubuntu 22.04 配置内核版本、GRUB 引导、远程桌面
  19. python软件下载免费还是收费-老男孩教育Python学院|Python收费是多少?
  20. MLOps极致细节:16. Azure ML Pipeline(机器学习管道),Azure Compute Instance搭建与使用

热门文章

  1. Python之线程(一)
  2. (208)ASIC开发总结
  3. (05)FPGA入门条件
  4. (96)FPGA PLL与MMCM区别?
  5. (93)FPGA模块例化传递参数(defparam)
  6. (09)FPGA时序分析模型
  7. 开两个服务内存溢出_应用服务OkHttpClient创建大量对外连接时内存溢出
  8. 22.创建DockWidget
  9. 谷歌浏览器 转方向_转专业 | 希望你们能在岔路口选对自己的路
  10. 【蓝桥杯嵌入式】【STM32】6_ADC之LCD实时显示电压值