SpringBoot系列15-mysql-multiple-data-sources1

2023-05-16

springboot 多数据源的一个简单示例

多数据源分包加载

新建数据库test1和表tbl_user

CREATE TABLE `tbl_user` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

新建数据库test2和表tbl_order

CREATE TABLE `tbl_order` (
  `id` int(11) NOT NULL,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

数据源配置application.properties文件

## test1 database 配置
spring.datasource.test1.jdbc-url=jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
spring.datasource.test1.username=root
spring.datasource.test1.password=root
spring.datasource.test1.driver-class-name=com.mysql.jdbc.Driver
## test2 database 配置
spring.datasource.test2.jdbc-url=jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
spring.datasource.test2.username=root
spring.datasource.test2.password=root
spring.datasource.test2.driver-class-name=com.mysql.jdbc.Driver

加载配置

主库配置DataSourceConfig1.java


//表示这个类为一个配置类
@Configuration
// 配置mybatis的接口类放的地方
@MapperScan(basePackages = "com.yuanfenge.demo.dao.test01", sqlSessionFactoryRef = "test1SqlSessionFactory")
public class DataSourceConfig1 {
    // 将这个对象放入Spring容器中
    @Bean(name = "test1DataSource")
    // 表示这个数据源是默认数据源
    @Primary
    // 读取application.properties中的配置参数映射成为一个对象
    // prefix表示参数的前缀
    @ConfigurationProperties(prefix = "spring.datasource.test1")
    public DataSource getDateSource1() {
        return DataSourceBuilder.create().build();
    }
    @Bean(name = "test1SqlSessionFactory")
    // 表示这个数据源是默认数据源
    @Primary
    // @Qualifier表示查找Spring容器中名字为test1DataSource的对象
    public SqlSessionFactory test1SqlSessionFactory(@Qualifier("test1DataSource") DataSource datasource)
        throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(datasource);
        bean.setMapperLocations(
            // 设置mybatis的xml所在位置
            new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/test01/*.xml"));
        return bean.getObject();
    }
    @Bean("test1SqlSessionTemplate")
    // 表示这个数据源是默认数据源
    @Primary
    public SqlSessionTemplate test1sqlsessiontemplate(
        @Qualifier("test1SqlSessionFactory") SqlSessionFactory sessionfactory) {
        return new SqlSessionTemplate(sessionfactory);
    }
}

从库配置DataSourceConfig2.java


@Configuration
@MapperScan(basePackages = "com.yuanfenge.demo.dao.test02", sqlSessionFactoryRef = "test2SqlSessionFactory")
public class DataSourceConfig2 {
    @Bean(name = "test2DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.test2")
    public DataSource getDateSource2() {
        return DataSourceBuilder.create().build();
    }
    @Bean(name = "test2SqlSessionFactory")
    public SqlSessionFactory test2SqlSessionFactory(@Qualifier("test2DataSource") DataSource datasource)
        throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(datasource);
        bean.setMapperLocations(
            new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/test02/*.xml"));
        return bean.getObject();
    }
    @Bean("test2SqlSessionTemplate")
    public SqlSessionTemplate test2sqlsessiontemplate(
        @Qualifier("test2SqlSessionFactory") SqlSessionFactory sessionfactory) {
        return new SqlSessionTemplate(sessionfactory);
    }
}

测试controller


/**
 * @auth 猿份哥
 * @description
 * @createTime 2020 - 5 - 19 16:45
 */
@RestController
public class TestController {

    @Autowired
    TestService testService;

    @RequestMapping("/test")
    public Object test(){
        List<Order> list = testService.selectOrder();
        return list;
    }
    @RequestMapping("/test2")
    public Object test2(){
        int i = testService.saveOrder();
        String msg=i>0?"success":"failed";
        return msg;
    }

}

总结

分包加载不支持分布式事物,如果是多个数据库的事物@Transaction将会失效,所以使用这种方式要避免分布式事物。

源码下载链接

原文链接: https://www.lskyf.com/post/103

作者:猿份哥,版权所有,欢迎保留原文链接进行转载:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot系列15-mysql-multiple-data-sources1 的相关文章

随机推荐

  • resultful风格接口

    一 产生背景 网络应用程序 xff0c 越来越流行前端和后端的分离设计 当前的发展趋势是前端的设计层出不穷 比如 xff1a 各种型号的手机 平板灯其他设计 因为必须要一种统一的机制方便不同的前端和后端进行通信 这就导致了API结构的流行
  • 【kafka】Exception thrown when sending a message with key='null' and payload='lizhenjuan;99' to topic

    今天碰到一个奇怪的问题 xff0c 如下图 xff1a 一 问题 1 问题截图 上午还可以发送消息成功的 xff0c 下午突然就发送不了消息了 我就检查我代码的问题 xff0c 是传递的格式不对 xff0c 还是数据要求不对 网上的资料显示
  • 【0723】自动化运维——saltstack

    24 1 自动化运维介绍 认识自动化运维 xff1a 传统运维效率低 xff0c 大多工作人为完成传统运维工作繁琐 xff0c 容易出错传统运维每日重复做相同的事情传统运维没有标准化流程传统运维的脚本繁多 xff0c 不能方便管理自动化运维
  • 【mysql】order by多个字段排序

    今天遇到了两个字段排序的问题 xff0c 感觉不是很清晰 xff0c 所有又按照规则查询了下 xff0c 总结下 count都是306的有三个 现在需要同时按照age和count排序 xff0c 测试最后的排序结果 默认都是按照age和co
  • java8使用积累

    1 将List lt T gt 数组转换为String并用逗号隔开 String join 34 34 List 2 idea自动补全代码教程 xff1a https www cnblogs com HF Made p 11417225 h
  • 【java】手动分页工具类

    最近小编遇到一个很绕的问题 xff0c 无法使用mybatis自带的分页插件对符合条件的数据进行分页 xff0c 故收集了一个自动分页的工具类 xff1a public static lt T gt List lt T gt getPage
  • redis 使用bitMap实现统计系统在线用户数量

    BitMap xff0c 简单来说 xff0c 其实也就是 byte 数组 xff0c 用二进制表示 xff0c 一个bit的值 xff0c 或者是0 xff0c 或者是1 xff1b 也就是说一个bit能存储的最多信息是2 它用一个bit
  • xml与实体之间的转换

    在对接一些第三方接口的时候往往需要涉及到一些对xml文件的处理 xff0c 小编今天主要总结一下JavaBean与xml文件之间互相转换的探索与实例 使用JAXB技术实现xml与实体之间的转换 1 是什么 xff1a JAXB xff08
  • SVN中trunk、branch、tag区别

    虽然一直都在用svn作项目管理 xff0c 但是一直都是傻傻的分不清主干 分支 今天小编就来详细介绍一下 xff1a branch 分支 xff1a 版本控制系统的一个特性就是能够把各种修改分离出来放在开发品的一个分割线上 这条线就被称为分
  • win10下如何解决VC++MSDEV.EXE的0xc0000142错误

    最近小编在学习时用到了vC 43 43 这个软件 xff0c 但是一直无法正常启动 小编的电脑是从win10家庭版升级到了win10企业版的 xff0c 之前并没有出现过什么异样 xff0c 直到最近软件无法正常打开 xff0c 从网上搜得
  • windows下获取文件上传路径报错:java.io.FileNotFoundException: (文件名、目录名或卷标语法不正确。)

    小编今天在java编程中使用fastdfs实现文件上传功能的时候 xff0c 获取windows文件路径时报错 xff1a java io FileNotFoundException 文件名 目录名或卷标语法不正确 原因分析 xff1a 出
  • qrcode(一)

    1 二维码概念 二维码又称QR Code xff0c QR全称Quick Response xff0c 是一个近几年来移动设备上超流行的一种编码方式 是用某种特定的几何图形按一定规律在平面 xff08 二维方向上 xff09 分布的黑白相间
  • zk服务启动报错:Unexpected exception exiting abnormally java.io.eofexception

    解决方案 xff1a 找到zoo conf中配置的dataDir和dataLogDir路径 然后删除两个文件夹下的version 2文件夹 重启服务 xff0c 问题解决
  • spark的转换算子2

    1 xff09 coalesce def coalesce numPartitions Int shuffle Boolean 61 false implicit ord Ordering T 61 null RDD T 该函数用于将RDD
  • mybatis中useGeneratedKeys和keyProperty的作用

    背景 xff1a 最近在看队友的代码 xff0c 发现个问题 xff0c 后觉是自己out了 在做关联表插入操作时 xff0c 需要根据主表的 主键id作详情表的属性值 xff0c 最笨的方法就是 xff0c 先插入主表 xff0c 然后通
  • idea git Update failed unable to access 'https://github.com/tiankonglanlande/springboot.git/'

    原文链接 https www lskyf com post 77 Update failed unable to access 39 https github com tiankonglanlande springboot git 39 e
  • mybatis 映射属性部分值为null的另一种特殊情况

    原文连接 xff1a https www lskyf com 今天遇到一个问题mybatis映射到Java属性部分数据没有值为null 表现其他Integer类型都有值 xff0c 唯独String类型没有值 疑问一个简单的映射为什么没有值
  • 小程序spring boot发送订阅消息

    原文链接 xff1a https www lskyf com post 81 1 订阅消息实体类 64 Data 64 AllArgsConstructor 64 NoArgsConstructor 64 Builder public cl
  • 商户后台小程序退款回调地址配置

    原文链接 xff1a https www lskyf com post 96 1 登录商户后台 https pay weixin qq com 2 开通该功能需要在商户平台 交易中心 退款管理 退款配置中配置notify url
  • SpringBoot系列15-mysql-multiple-data-sources1

    springboot 多数据源的一个简单示例 多数据源分包加载 新建数据库test1和表tbl user CREATE TABLE 96 tbl user 96 96 id 96 int 11 NOT NULL 96 name 96 var