环境说明:
springboot版本:2.7.1
jdk版本:1.8
本次以mysql和pg为例:
1. pom文件引入jar包
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1.tmp</version>
</dependency>
<!--动态数据源-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.5.0</version>
</dependency>
<!--pg-->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.22</version>
</dependency
<!--Mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
2. 修改yml配置文件
spring:
datasource:
dynamic:
datasource:
master:
url: jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8
username: admin
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
gaussdb:
username: admin
password: 123456
url: jdbc:postgresql://localhost:5308/db2
driver-class-name: org.postgresql.Driver
mp-enabled: true
3. 样例代码
实体对象
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@TableName("t_user")
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User implements Serializable {
private static final long serialVersionUID = -1923859222295750469L;
/**
* 主键
*/
@TableId(type = IdType.ID_WORKER)
private Long id;
/**
* 姓名
*/
private String name;
/**
* 年龄
*/
private Integer age;
}
services
import com.baomidou.mybatisplus.extension.service.IService;
import com.iuv.entity.User;
public interface UserService extends IService<User> {
/**
* 添加 User
*
* @param user 用户
*/
void addUser(User user);
}
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.iuv.dao.system.mapper.UserMapper;
import com.iuv.entity.User;
import com.iuv.service.tool.UserService;
import org.springframework.stereotype.Service;
@Service
@DS("gaussdb")
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
/**
* 类上 {@code @DS("gaussdb")} 代表默认从库,在方法上写 {@code @DS("master")} 代表默认主库
*
* @param user 用户
*/
@DS("master")
@Override
public void addUser(User user) {
baseMapper.insert(user);
}
}
mapper
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.iuv.entity.User;
public interface UserMapper extends BaseMapper<User> {
}
测试用例
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.iuv.entity.User;
import com.iuv.service.tool.UserService;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserServiceImplTest {
@Autowired
private UserService userService;
/**
* 2库同时添加
*/
@Test
public void addUser() {
User userMaster = User.builder().name("mysql添加").age(21).build();
userService.addUser(userMaster);
User userSlave = User.builder().name("pg库添加").age(31).build();
userService.save(userSlave);
}
/**
* pg库查询
*/
@Test
public void testListUser() {
List<User> list = userService.list(new QueryWrapper<>());
log.info("【list】= {}", JSONUtil.toJsonStr(list));
}
}
4. 执行测试结果
启动服务后可以看到打印日志,默认数据源为第一个配置的master,需要制定数据源使用@DS("gaussdb")即可。
2023-06-10 10:44:07.241 INFO 11688 --- [ main] com.zaxxer.hikari.HikariDataSource : master - Starting...
2023-06-10 10:44:08.080 INFO 11688 --- [ main] com.zaxxer.hikari.HikariDataSource : master - Start completed.
2023-06-10 10:44:08.081 INFO 11688 --- [ main] com.zaxxer.hikari.HikariDataSource : gaussdb - Starting...
2023-06-10 10:44:09.812 INFO 11688 --- [ main] com.zaxxer.hikari.HikariDataSource : gaussdb - Start completed.
2023-06-10 10:44:09.814 INFO 11688 --- [ main] c.b.d.d.DynamicRoutingDataSource : 初始共加载 2 个数据源
2023-06-10 10:44:09.814 INFO 11688 --- [ main] c.b.d.d.DynamicRoutingDataSource : 动态数据源-加载 master 成功
2023-06-10 10:44:09.815 INFO 11688 --- [ main] c.b.d.d.DynamicRoutingDataSource : 动态数据源-加载 gaussdb 成功
2023-06-10 10:44:09.815 INFO 11688 --- [ main] c.b.d.d.DynamicRoutingDataSource : 当前的默认数据源是单数据源,数据源名为 master
查询结果
2023-06-10 10:46:36.195 INFO 20500 --- [ main] c.c.c.d.server.util.UserServiceImplTest : 【list】= [{"name":"pg库添加","id":1667724405532794881,"age":31}]
本文由博客一文多发平台 OpenWrite 发布!