流程:1.引入依赖 > 2.数据源配置 > 3.代码实现 > 4.验证
1. 引入依赖
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.24</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatisplus-spring-boot-starter</artifactId>
<version>1.0.5</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>2.1.8</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.4.2</version>
</dependency>
</dependencies>
2. 数据源配置
server:
port: 8555
spring:
datasource:
dynamic:
#默认数据源
primary: master
datasource:
master:
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://8.134.108.92:3306/exam_plan?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
slave:
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://8.134.33.227:3306/exam_plan?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
mybatis-plus:
mapper-locations: classpath:/mapper/*.xml
typeAliasesPackage: com.yanghouqing.masterslave.model.entity
3.代码实现
3.1.建表并插入数据
use exam_plan;
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`id` int(0) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`create_time` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `t_user` VALUES (1, 'yang', '2022-09-01 22:21:02');
INSERT INTO `t_user` VALUES (2, 'sbsb', '2022-09-01 14:42:48');
3.2.实体类
@Data
@TableName("t_user")
public class TUser implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
private String name;
@TableField("create_time")
private Date createTime;
}
3.3.控制器
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private TUserService userService;
@PostMapping("/add")
public Result test(@RequestBody TUser user){
return userService.add(user);
}
@PostMapping("/list")
public Result getList(){
return userService.getList();
}
}
3.4.业务层接口及实现类
public interface TUserService extends IService<TUser> {
Result add(UserDto user);
Result getList();
}
@Service
public class TUserServiceImpl extends ServiceImpl<TUserMapper, TUser> implements TUserService {
@Override
public Result add(TUser user) {
baseMapper.insert(user);
return new Result();
}
@DS("slave")
@Override
public Result getList() {
return new Result(baseMapper.selectList(new EntityWrapper<TUser>().orderBy("id")));
}
}
3.5. dao层
public interface TUserMapper extends BaseMapper<TUser> {
}
4.验证
2022-09-02 17:09:53.315 INFO 10520 --- [ main] com.zaxxer.hikari.HikariDataSource : slave - Start completed.
2022-09-02 17:09:53.315 INFO 10520 --- [ main] c.b.d.d.DynamicRoutingDataSource : 初始共加载 2 个数据源
2022-09-02 17:09:53.315 INFO 10520 --- [ main] c.b.d.d.DynamicRoutingDataSource : 动态数据源-加载 slave 成功
2022-09-02 17:09:53.316 INFO 10520 --- [ main] c.b.d.d.DynamicRoutingDataSource : 动态数据源-加载 master 成功
2022-09-02 17:09:53.316 INFO 10520 --- [ main] c.b.d.d.DynamicRoutingDataSource : 当前的默认数据源是单数据源,数据源名为 master
2022-09-02 17:09:53.893 INFO 10520 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2022-09-02 17:09:54.091 INFO 10520 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8555 (http) with context path ''
2022-09-02 17:09:54.103 INFO 10520 --- [ main] c.m.masterslave.MasterslaveApplication : Started MasterslaveApplication in 3.178 seconds (JVM running for 4.174)
写完代码后可以通过Postman分别请求两个接口测试。
关注我,下次出一个MySQL如何搭建主从复制。