一、Mysql数据库
1、新建数据源
CREATE DATABASE `nothing-phone`;
CREATE DATABASE nothing_dash_board;
2、新建表
CREATE TABLE `master_multiple_tb` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`phone` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `slave_multiple_tb` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`phone` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
二、项目依赖
注意检查pom文件当前SpringBoot版本是否与依赖版本兼容。
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- MyBatis-Plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<!-- MyBatis-Plus Dynamic Datasource -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.experimental</groupId>
<artifactId>spring-aot</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- MySQL Connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
</dependencies>
二、配置多数据源
这里需要注意的是,如果配置了mapper-locations,那么类路径资源文件的mapper文件夹不能为空。
application.yml内容如下:
spring:
application:
name: multipleDataSource
datasource:
dynamic:
primary: master
datasource:
master:
url: jdbc:mysql://localhost:3306/nothing-phone?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root01
password: localhost
driver-class-name: com.mysql.cj.jdbc.Driver
slave:
url: jdbc:mysql://localhost:3306/nothing_dash_board?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root01
password: localhost
driver-class-name: com.mysql.cj.jdbc.Driver
#mybatis-plus:
# mapper-locations: classpath*:/mapper/*Mapper.xml
三、定义实体类和Mapper接口
1、实体类
package com.example.multipledatasource.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class MasterMultipleTb extends Model<MasterMultipleTb> {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private String email;
private String phone;
}
package com.example.multipledatasource.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class SlaveMultipleTb extends Model<SlaveMultipleTb> {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private String email;
private String phone;
}
2、Mapper类
package com.example.multipledatasource.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.multipledatasource.entity.MasterMultipleTb;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Repository
@Mapper
public interface MasterMultipleTbMapper extends BaseMapper<MasterMultipleTb> {
}
package com.example.multipledatasource.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.multipledatasource.entity.SlaveMultipleTb;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Repository
@Mapper
public interface SlaveMultipleTbMapper extends BaseMapper<SlaveMultipleTb> {
}
3、Service层实现
package com.example.multipledatasource.service;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.example.multipledatasource.entity.MasterMultipleTb;
import com.example.multipledatasource.entity.SlaveMultipleTb;
import com.example.multipledatasource.mapper.MasterMultipleTbMapper;
import com.example.multipledatasource.mapper.SlaveMultipleTbMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class MultipleDataSourceService {
@Resource
private MasterMultipleTbMapper masterMultipleTbMapper;
@Resource
private SlaveMultipleTbMapper slaveMultipleTbMapper;
//使用默认的master数据源
public void insertMasterData(){
System.out.println("新增master数据源数据!");
MasterMultipleTb masterMultipleTb = new MasterMultipleTb();
masterMultipleTb.setName("zhangsan");
masterMultipleTb.setEmail("11111@qq.com");
masterMultipleTb.setPhone("11111");
masterMultipleTbMapper.insert(masterMultipleTb);
}
// 明确指定使用slave数据源
@DS("slave")
public void insertSlaveData() {
System.out.println("新增slave数据源数据!");
SlaveMultipleTb slaveMultipleTb = new SlaveMultipleTb();
slaveMultipleTb.setName("lisi");
slaveMultipleTb.setEmail("22222@qq.com");
slaveMultipleTb.setPhone("22222");
slaveMultipleTbMapper.insert(slaveMultipleTb);
}
}
4、控制层实现
package com.example.multipledatasource.controller;
import com.example.multipledatasource.service.MultipleDataSourceService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
@RequestMapping("/api")
public class TestController {
@Resource
private MultipleDataSourceService multipleDataSourceService;
@GetMapping("/masterData")
public ResponseEntity<String> masterData() {
multipleDataSourceService.insertMasterData();
return ResponseEntity.ok("新增master数据源数据");
}
@GetMapping("/slaveData")
public ResponseEntity<String> slaveData() {
multipleDataSourceService.insertSlaveData();
return ResponseEntity.ok("新增slave数据源数据");
}
}
6457

被折叠的 条评论
为什么被折叠?



