框架:springboot+mybatis
数据库:mysql5.7+sqlserver2012
dynamic-datasource3.5.0(实现多数据源)
添加dynamic-datasource的依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.0</version>
</dependency>
配置数据源
server:
port: 8081
spring:
#全局返回时间格式
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: Asia/Shanghai
servlet:
multipart:
enabled: true
file-size-threshold: 0B
maxFileSize: 100MB
maxRequestSize: 1000MB
datasource:
hikari:
minimum-idle: 4
maximum-pool-size: 16
connection-timeout: 10000
idle-timeout: 30000
connection-init-sql: set names utf8mb4
dynamic:
primary: mysql
datasource:
mysql:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/crud?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
username: root
password: root
sqlserver:
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
url: jdbc:sqlserver://localhost:1433;DataBase=crud
username: sa
password: 123456
mysql1:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/crudd?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
username: root
password: root
mybatis:
type-aliases-package: com.wz.demo.entity
mapper-locations: classpath:*/*.xml
接着可直接在mapper类里面添加@DS(“数据源名字”)
注解可以写在方法上,也可以写类上,遵循就近原则
package com.wz.demo.mapper;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.wz.demo.entity.TransTest;
import java.util.List;
/**
* @author wz
* @date 2022/01/01
*/
public interface TransTestMapper {
@DS("sqlserver")
List<TransTest> selectLike(TransTest transTest);
@DS("sqlserver")
int insertUser(TransTest transTest);
}
package com.wz.demo.mapper;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.wz.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* @author wz
* @date 2021/12/1
*/
@Mapper
@DS("mysql")
public interface UserMapper {
List<User> getAll();
int deleteId(int id);
int insertUser(User user);
int updateUser(User user);
List<User> selectLike(User user);
@DS("sqlserver")
List<User> selectSql(User user);
@DS("mysql1")
int insertMysql1User(User user);
}
多数据源事务可以直接在方法上写这个@DSTransactional注解
@Override
@DSTransactional
public int transInsert(TransTest transTest) {
User user = new User();
user.setId(transTest.getId());
user.setPassword(transTest.getPassword());
user.setAddress(transTest.getAddress());
user.setName(transTest.getName());
userMapper.insertUser(user);
userMapper.insertMysql1User(user);
transTestMapper.insertUser(transTest);
return 1;
}
注意:一开始我的dynamic-datasource pom依赖版本是2.5.4,发现这个版本用不了这个注解,换成3.5.0版本就可以用了