SpringBoot-多数据源切换和事物处理(免费)

作者原始文章: SpringBoot-多数据源切换和事物处理 最新内容和改动请看上面的文章

安装

<dependency>
    <groupId>com.gitee.huanminabc</groupId>
    <artifactId>dynamic-datasource</artifactId>
    <version>1.0.3-RELEASE</version>
</dependency>

配置

spring:
  datasource:
    default-db-key: master # 默认数据源key
    database-load-activate: false # 是否启用数据库加载
    frame-type: mybatis-plus # 框架类型 mybatis-plus or mybatis
    multi-db:
      - master:
          driver-class-name: com.mysql.cj.jdbc.Driver
          type: com.alibaba.druid.pool.DruidDataSource
          username: root
          password: root
          url: jdbc:mysql://192.168.47.130:3306/demo?characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&maxReconnects=10&useSSL=false&serverTimezone=Asia/Shanghai&useTimezone=true
      - local:
          driver-class-name: com.mysql.cj.jdbc.Driver
          type: com.alibaba.druid.pool.DruidDataSource
          username: root
          password: root
          url: jdbc:mysql://127.0.0.1:3306/demo?characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&maxReconnects=10&useSSL=false&serverTimezone=Asia/Shanghai&useTimezone=true
      - resource:
          driver-class-name: com.mysql.cj.jdbc.Driver
          type: com.alibaba.druid.pool.DruidDataSource
          username: root
          password: root
          url: jdbc:mysql://192.168.47.130:3306/resource?characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&maxReconnects=10&useSSL=false&serverTimezone=Asia/Shanghai&useTimezone=true

# 无须设置mybatis-plus的配置会自动根据frame-type识别的  ,而mybatis-plus兼容mybatis的配置
mybatis:
  #1.classpath:只会到你的classes路径中查找找文件。
  #2.classpath*:不仅会到classes路径,还包括jar文件中(classes路径)进行查找。
  mapper-locations: classpath*:/**/*Mapper.xml    # mapper映射文件位置
  type-aliases-package: com.gitee.huanminabc.**.entity    # 实体类所在的位置
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl   #用于控制台打印sql语句
    map-underscore-to-camel-case: true #开启将带有下划线的表字段 映射为驼峰格式的实体类属性

注意: 数据源的 key 不能重复否则报错。

数据库配置(必须)

就算是不启动 database-load-activate=true 也必须有一个resource 库,这个里面必须有一个t_datasource 表, 而这个库可以存储一些共有资源 , 变化频率较低的数据。


-- 下表要放入到默认数据源中的数据库里才行
CREATE TABLE `t_datasource` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '绑定的key,用于数据源的切换',
  `url` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '数据库连接地址',
  `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '数据库用户名',
  `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '数据库密码',
  `driverClassName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '数据库驱动',
  `pool` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'com.zaxxer.hikari.HikariDataSource' COMMENT '数据库连接池类型: com.alibaba.druid.pool.DruidDataSource,com.zaxxer.hikari.HikariDataSource,..',
  `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '数据库类型:  mysql ,oracle,..',
  `state` int(2) NOT NULL DEFAULT '1' COMMENT '是否可用: 1可用 ,2不可用',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `key` (`key`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;

注意: 这个数据库必选我占时不想去掉, 因为我发现, 很多时候用着用着,就会使用数据库来存储连接信息了, 不然每个项目都需要在 yml 维护大量的多数据源非常麻烦。

使用教程

@DBSwitch 数据源切换支持在方法和类上
@DBTransactional事务只支持方法级别的

主启动类上必须添加以下注解, 不要问为什么。

//开启AOP的动态代理,这样可以不用实现接口就能使用AOP
@EnableAspectJAutoProxy(proxyTargetClass = true) 
//开始事务
@EnableTransactionManagement 
public class WebApplication {
   

数据源切换

截图_20240122223552.png

截图_20240122223620.png

数据源事物

截图_20240122223646.png

加入博主语雀知识库,查看最新文章和技术
点击查看,点击查看,点击查看,点击查看
点赞 -收藏 -关注
有问题在评论区或者私信我-收到会在第一时间回复

相关推荐

  1. springboot动态切换数据

    2024-01-24 14:16:01       25 阅读
  2. Redis - 数据切换

    2024-01-24 14:16:01       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-24 14:16:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-24 14:16:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-24 14:16:01       87 阅读
  4. Python语言-面向对象

    2024-01-24 14:16:01       96 阅读

热门阅读

  1. SpringMVC-域对象共享数据

    2024-01-24 14:16:01       48 阅读
  2. 机器学习-PCA降维【手撕】

    2024-01-24 14:16:01       52 阅读
  3. c# MathNet.Numerics 圆拟合使用案例

    2024-01-24 14:16:01       54 阅读
  4. c语言中的sscanf函数

    2024-01-24 14:16:01       46 阅读
  5. SpringBoot如何测试打包部署

    2024-01-24 14:16:01       45 阅读
  6. 蒙特卡洛方法概述

    2024-01-24 14:16:01       55 阅读
  7. Golang中int, int8, int16, int32, int64和uint区别

    2024-01-24 14:16:01       52 阅读
  8. 02_正则表达式的应用

    2024-01-24 14:16:01       49 阅读