Dynamic Datasource - 动态数据源
springboot版本: 2.2.2.RELEASE
mybatis-plus版本: 3.1.0
druid版本: 1.1.18
dynamic-datasource版本: 2.4.2
mysql-connector-java版本: 8.0.15
mybatis-plus-generator版本: 3.1.0
※当mybatis-plus版本与mybatis-plus-generator版本为3.1.0以上时, 使用jdk8的LocalDateTime查询时会报如下错误:java.sql.SQLFeatureNotSupportedException
, 将mybatis-plus和mybatis-plus-generator版本降低即可。
引入依赖
1 | <!-- mybatis-plus --> |
配置文件
1 | # dynamic datasource |
启动类修改
去除DruidDataSourceAutoConfigure.class, 若没有去除, 否则会在spring.datasource下面查找url和username等相关配置. 需要根据引入的连接池进行去除1
(exclude = DruidDataSourceAutoConfigure.class)
使用@DS进行数据源切换
interface:1
2
3
4
5public interface IUserService extends IService<User> {
List<User> selectByMyWrapper(@Param(Constants.WRAPPER) Wrapper<User> userWrapper);
List<User> selectByName(@Param("name") String name);
}
implement1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
"slave") (
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
UserMapper userMapper;
public List<User> selectByMyWrapper(Wrapper<User> userWrapper) {
return userMapper.selectByMyWrapper(userWrapper);
}
"master") (
public List<User> selectByName(String name) {
return userMapper.selectByName(name);
}
}
mapper1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18public interface UserMapper extends BaseMapper<User> {
/**
* 如果自定义的方法还希望能够使用MP提供的Wrapper条件构造器,则需要如下写法
*
* @param userWrapper
* @return
*/
"SELECT * FROM user ${ew.customSqlSegment}") (
List<User> selectByMyWrapper(@Param(Constants.WRAPPER) Wrapper<User> userWrapper);
/**
* 和Mybatis使用方法一致
* @param name
* @return
*/
"SELECT * FROM user where userName = #{name}") (
List<User> selectByName(@Param("name") String name);
}
※@DS(“slave”) 括号内即是application.properties中配置的数据源名称,不加注解默认是访问主库master,可加在service方法上,也可加在mapper方法上,但强烈不建议同时在service和mapper注解。
@DS 可以注解在方法上和类上,同时存在方法注解优先于类上注解。