Springboot和MyBatis-Plus多数据源含主从和多库

目录

 

相关网址

改造原有的springboot项目

Pom文件的依赖

application.yml文件

原有不变的类

分页和排序主要会用到的入参类


相关网址

mybatis-plus官网:https://mybatis.plus/guide/dynamic-datasource.html#%E6%96%87%E6%A1%A3-documentation

主要参考:https://blog.csdn.net/belonghuang157405/article/details/89708851

改造原有的springboot项目

Pom文件的依赖

增加了dynamic-datasource-spring-boot-starter

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.4</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>

application.yml文件

我主要修改了12行-30行其他没有变。

spring.autoconfigure.exclude这个配置要注意   和启动类配置一个作用(@SpringBootApplication(exclude= {DruidDataSourceAutoConfigure.class})),选一个就行

spring:
  devtools:
    restart:
      enabled: true
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
    serialization:
      write-dates-as-timestamps: false
  autoconfigure:
    exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure  # 为了某些版本的springboot  @SpringBootApplication(exclude= {DataSourceAutoConfiguration.class}) 无法生效
  datasource:
    dynamic:
      primary: master #设置默认的数据源或者数据源组
      datasource:
        master:
          url: jdbc:mysql://192.168.27.238:30220/test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
          username: root
          password: root123
          driverClassName: com.mysql.cj.jdbc.Driver
        slave:  # 支持主从、纯粹多库、以及混合配置 ,类、方法上加@DS注解切换数据源
          url: jdbc:mysql://192.168.27.238:30220/test/test?serverTimezone=Hongkong&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false  # serverTimezone=Hongkong 需要填上时区
          username: root
          password: root123
          driverClassName: com.mysql.cj.jdbc.Driver
        adminServer:
          url: jdbc:mysql://192.168.27.238:30220/ry-vue?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
          username: root
          password: root123
          driverClassName: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      # 下面为连接池的补充设置,应用到上面所有数据源中
      # 初始化大小,最小,最大
      initial-size: 5
      min-idle: 5
      max-active: 50
      # 配置获取连接等待超时的时间
      max-wait: 60000
      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      time-between-eviction-runs-millis: 600000
      # 配置一个连接在池中最小生存的时间,单位是毫秒
      min-evictable-idle-time-millis: 300000
      validation-query: SELECT 1 FROM DUAL
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      # 打开PSCache,并且指定每个连接上PSCache的大小
      pool-prepared-statements: true
      # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
      max-pool-prepared-statement-per-connection-size: 20
      filters: stat,wall,slf4j
      use-global-data-source-stat: true
      # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
      connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
      stat-view-servlet:
        enabled: true
        login-username: admin
        login-password: admin
        reset-enable: true
        url-pattern: /druid/*
        allow: 0.0.0.0
        deny:
      web-stat-filter:
        enabled: true
        url-pattern: /*
        exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
        session-stat-enable: false
        session-stat-max-count: 500

  redis:
    # 地址
    #    host: 192.168.27.106
    # 端口,默认为6379
    #    port: 7004
    # 数据库索引
    #    database: 0
    # 密码
    password:
    # 连接超时时间
    timeout: 10s
    lettuce:
      pool:
        # 连接池中的最小空闲连接
        min-idle: 0
        # 连接池中的最大空闲连接
        max-idle: 8
        # 连接池的最大数据库连接数
        max-active: 8
        # #连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: -1ms
    cluster:
      max-redirects: 3
      nodes:
        - 192.168.25.62:7000
        - 192.168.25.62:7001
        - 192.168.27.79:7002
        - 192.168.27.79:7003
        - 192.168.27.106:7004
        - 192.168.27.106:7005

knife4j:
  # 开启增强配置2.0.6版本后支持,
  enable: true
  #   开启Swagger的Basic认证功能,默认是false
  basic:
    enable: true
    # Basic认证用户名
    username: admin
    # Basic认证密码
    password: admin

# logging start
#logging.file: "logs/hello.log"
logging:
  file:
    max-size: 2KB
    max-history: 20
  level:
    root: INFO
    com.swhysc: INFO
    com.swhysc.staff.client.Local: debug
    com.swhysc.staff.client.LocalSpring: debug
  pattern:
    console: "%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%t]){faint} %clr(%-40.40logger{39}){cyan}[lineno:%line]    %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}"
#    file: "%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39}[lineno:%line]: %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}"
#  path: "/opt/logs"
#  config: logback.xml

原有不变的类

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Builder;
import lombok.Data;

/**
 * 数据库实体类
 */
@TableName("test_user")
@Data
@Builder
public class UserDO {

    @TableId(type= IdType.AUTO)
    private Long id;

    private String name;

}

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.swhysc.base.entity.UserDO;
import org.apache.ibatis.annotations.Mapper;
/**
 * adminServer库的Mapper类接口
 */
@Mapper
@DS("adminServer")
public interface DsUserMapper extends BaseMapper<UserDO> {

}

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.swhysc.base.entity.UserDO;
import org.apache.ibatis.annotations.Mapper;
/**
 * Mapper类接口
 */
@Mapper
public interface UserMapper extends BaseMapper<UserDO> {

}

/**
 * 配置分页插件
 */
@Configuration
public class MybatisPlusConfig {

    /**
     * 分页插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}



import com.baomidou.mybatisplus.extension.service.IService;
import com.swhysc.base.entity.UserDO;
/**
 * service类接口
 */
public interface DsUserService extends IService<UserDO> {
}


import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.swhysc.base.entity.UserDO;
import com.swhysc.base.mapper.DsUserMapper;
import org.springframework.stereotype.Service;
/**
 * service类实现
 */
@Service
public class DsUserServiceImpl extends ServiceImpl<DsUserMapper, UserDO> implements DsUserService {
}

分页和排序主要会用到的入参类

        /**分页类,入参页面和页面数据大小*/
        final IPage<UserDO> page = new Page<>(1,5);
        /**查询封装类,主要是查询实体,以及排序字段*/
        final QueryWrapper<UserDO> wrapper = new QueryWrapper<>();
        wrapper.setEntity(UserDO.builder().build());
        wrapper.orderByAsc("id");

        /**必须注入了分页的拦截器bean分页再回有效果*/

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值