需要的依赖
<!--数据层--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.23</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency><!--配置多数据源--> <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>3.5.0</version> </dependency>
这个配置文件真有说法
datasource:
dynamic:
druid
这下面一大段的链接配置需要这么写 或许别的写法也可以 我只有这么写才启动成功了 德鲁伊连接池不配置 会起不来 然后数据库的配置格式也要和我的配置文件一样(注意空格)
我数据库是sqlservice的 driver-class-name: 指定的驱动是 sqlservice的数据库 如果换数据库记得修改
下面是是配置文件
server: port: 8080 spring: datasource: dynamic: druid: initial-size: 5 min-idle: 5 maxActive: 20 # 配置获取连接等待超时的时间 maxWait: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 timeBetweenEvictionRunsMillis: 6000 # 配置一个连接在池中最小生存的时间,单位是毫秒 minEvictableIdleTimeMillis: 60000 # 配置一个连接在池中最大生存的时间,单位是毫秒 maxEvictableIdleTimeMillis: 900000 testWhileIdle: true testOnBorrow: false testOnReturn: false # 打开PSCache,并且指定每个连接上PSCache的大小 poolPreparedStatements: true maxPoolPreparedStatementPerConnectionSize: 20 primary: master #设置默认的数据源或者数据源组,默认值即为master strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 datasource: master: driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver url: jdbc:sqlserver://localhost:14333;database=dbname username: hello password: hello slave_1: driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver url: jdbc:sqlserver://localhost:14333;database=dbname username: hello password: hello
配置完成了 再创两个mapper 再使用@DS注解 指定 再配置文件中制定的 数据库连接名称 比如@DS(slave_1: ) 这个是指定数据库连接的 什么都不写就是 默认 调用这个mapper 执行操作都是针对master :主库的
package com.mapper;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.domain.CtpAttachment;
import org.apache.ibatis.annotations.Mapper;
//查找从库的库
@Mapper
@DS("slave_1")
public interface AttachmentMapper extends BaseMapper<DATA> {
}
package com.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.domain.*;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
//查找默认主的库
@Mapper
public interface MoveMapper extends BaseMapper<Data> {
}
!!!!!!!!!!!!!!!!!!!!!!!!最关键的点
service 调用mapper 的时候千万不要开启事务 估计是因为是两个数据库 所以不支持事务
如果使用了 事务注解 那么 指定数据源 会直接失效
//@Transactional 开启之后 多数据源就会失效!