赞
踩
<!-- lombok插件 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!-- mysql驱动依赖--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.15</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jdbc</artifactId> </dependency> <!--阿里的druid--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.14</version> </dependency> <!-- mybatis-plus依赖--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.2.0</version> </dependency> <!--dynamic-datasource多数据源配置--> <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>2.5.4</version> </dependency>
spring: autoconfigure: #排除原生的druid的影响。 exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure datasource: ##使用druid数据源 #type: com.alibaba.druid.pool.DruidDataSource dynamic: #设置默认的数据源,默认值为master primary: master datasource: slave: #mysql数据源 url: jdbc:mysql://localhost:3306/ebuy?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=false username: 账号 password: 密码 driver-class-name: com.mysql.cj.jdbc.Driver druid: #初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时 initial-size: 10 #最大连接池数量 max-active: 100 #最小连接池数量 min-idle: 10 # 配置获取连接等待超时的时间 max-wait: 6000 #关闭Druid的防火墙wall filters: config,stat testOnBorrow: false testWhileIdle: true timeBetweenEvictionRunsMillis: 60000 master: #mysql云数据源 url: jdbc:mysql://云数据库外网ip地址:3306/test?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=false username: 账号 password: 密码 driver-class-name: com.mysql.cj.jdbc.Driver druid: #初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时 initial-size: 10 #最大连接池数量 max-active: 100 #最小连接池数量 min-idle: 10 # 配置获取连接等待超时的时间 max-wait: 6000 #执行多行sql multiStatementAllow: true #关闭Druid的防火墙wall filters: config,stat testOnBorrow: false testWhileIdle: true timeBetweenEvictionRunsMillis: 60000
项目结构

数据库表:

数据库表:

package org.mycompony.datasourceswitch.pojo.master; import lombok.Data; /** * @version V1.0 * @ClassName:Teacher * @Description:TODO * @author: wuhaibo * @date:2020/8/15 10:20 */ @Data public class Teacher { private Integer id; private String name; private Integer age; private String sex; private Double money; }
package org.mycompony.datasourceswitch.pojo.slave; import lombok.Data; /** * @version V1.0 * @ClassName:Teacher * @Description:TODO * @author: wuhaibo * @date:2020/8/15 10:20 */ @Data public class Student { private Integer id; private String name; private Integer age; private String sex; private Double money; }
package org.mycompony.datasourceswitch.mapper.master; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.annotations.Mapper; import org.mycompony.datasourceswitch.pojo.master.Teacher; /** * @version V1.0 * @ClassName:TeacherMapper * @Description:TODO * @author: wuhaibo * @date:2020/8/15 10:31 */ @Mapper @DS("master") public interface TeacherMapper extends BaseMapper<Teacher> { }
package org.mycompony.datasourceswitch.mapper.slave; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.mycompony.datasourceswitch.pojo.slave.Student; /** * @version V1.0 * @ClassName:StudentMapper * @Description:TODO * @author: wuhaibo * @date:2020/8/15 10:31 */ @Mapper @DS("slave") public interface StudentMapper extends BaseMapper<Student> { }
package org.mycompony.datasourceswitch.controller; import com.baomidou.dynamic.datasource.annotation.DS; import lombok.extern.slf4j.Slf4j; import org.mycompony.datasourceswitch.mapper.master.TeacherMapper; import org.mycompony.datasourceswitch.mapper.slave.StudentMapper; import org.mycompony.datasourceswitch.pojo.master.Teacher; import org.mycompony.datasourceswitch.pojo.slave.Student; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; /** * @version V1.0 * @ClassName:TeacherController * @Description:TODO * @author: wuhaibo * @date:2020/8/15 10:34 */ @RestController @Slf4j @RequestMapping("/api") public class TeacherController { @Resource private TeacherMapper teacherMapper; @Resource private StudentMapper studentMapper; @RequestMapping("/getTeacherById") public Teacher getTeacherById(){ log.info("当前的默认数据源是单数据源,数据源名为 {}", "master"); return teacherMapper.selectById(1); } @RequestMapping("/getStudentById") public Student getStudentById(){ log.info("当前的默认数据源是单数据源,数据源名为 {}", "slave"); return studentMapper.selectById(1); } }

出现了上述图片就说明整合多数据源成功。
测试结果:


测试结果:

springboot整合多数据源以及切换遇到的坑 Caused by: java.lang.IllegalStateException: dbType not support : null
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。