项目Git地址:SpringBoot 配置多数据源:Jacob-multi-data-source

  1. 准备工作
    准备两个数据库(此模块中两个数据库一个为本地 一个为远程,本地为主,远程为从)。然后建表。
#本地库
CREATE TABLE `username` (`id` bigint(11) NOT NULL AUTO_INCREMENT,`username` varchar(255) NOT NULL,`password` varchar(255) NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
#远程库
CREATE TABLE `user` (`id` bigint NOT NULL COMMENT '主键ID',`name` varchar(30) DEFAULT NULL COMMENT '姓名',`age` int DEFAULT NULL COMMENT '年龄',`email` varchar(50) DEFAULT NULL COMMENT '邮箱',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  1. 创建SpringBoot项目
    最终目录结构:
  1. 添加依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.1.0</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.1.0</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><dependency><groupId>com.github.xiaoymin</groupId><artifactId>swagger-bootstrap-ui</artifactId><version>1.9.6</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.18</version></dependency>
  1. 编写配置文件
server:port: 8083swagger:enabled: truemybatis:mapper-locations: classpath:mapper/*/*.xml,classpath:mapper/*.xml
## 主数据源
master:package: cn.jacob.datasource.mapper.masterdatasource:url: jdbc:mysql://localhost:3306/tst?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTCusername: rootpassword:driverClassName: com.mysql.cj.jdbc.Driver
## 从数据源
cluster:datasource:url: jdbc:mysql://121.36.9.198:3306/local?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=UTCusername: rootpassword:driverClassName: com.mysql.cj.jdbc.Driver# -------------------------------------这一块配置不加会导致项目启动很慢-------------------------------------
# 连接池的配置信息
# 初始化大小,最小,最大
spring:datasource:type: com.alibaba.druid.pool.DruidDataSourceinitialSize: 5minIdle: 5maxActive: 20# 配置获取连接等待超时的时间maxWait: 60000# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒timeBetweenEvictionRunsMillis: 60000# 配置一个连接在池中最小生存的时间,单位是毫秒minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: false# 打开PSCache,并且指定每个连接上PSCache的大小poolPreparedStatements: truemaxPoolPreparedStatementPerConnectionSize: 20# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙filters: stat,wall,log4j# 通过connectProperties属性来打开mergeSql功能;慢SQL记录connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# -------------------------------------------------------------------------------------------------------
  1. 编写配置类
    swagger配置类
@Configuration@EnableSwagger2public class SwaggerConfiguration {@Beanpublic Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("cn.jacob")).paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("swagger-bootstrap-ui RESTful APIs").description("swagger-bootstrap-ui").termsOfServiceUrl("http://localhost:8083/").contact("m15870979735@qq.com").version("1.0").build();}}

主数据源配置类

@Configuration//扫描 Mapper 接口并容器管理@MapperScan(basePackages = {"cn.jacob.datasource.mapper.master"}, sqlSessionFactoryRef = "masterSqlSessionFactory")public class MasterDataSourceConfig {// 精确到 master 目录,以便跟其他数据源隔离static final String PACKAGE = "cn.jacob.datasource.mapper.master";static final String MAPPER_LOCATION = "classpath:mapper/**/*.xml";@Value("${master.datasource.url}")private String url;@Value("${master.datasource.username}")private String user;@Value("${master.datasource.password}")private String password;@Value("${master.datasource.driverClassName}")private String driverClass;@Primary@Bean(name = "masterDataSource")public DataSource masterDataSource() {DruidDataSource dataSource = new DruidDataSource();dataSource.setDriverClassName(driverClass);dataSource.setUrl(url);dataSource.setUsername(user);dataSource.setPassword(password);return dataSource;}@Bean(name = "masterTransactionManager")@Primarypublic DataSourceTransactionManager masterTransactionManager() {return new DataSourceTransactionManager(masterDataSource());}@Bean(name = "masterSqlSessionFactory")@Primarypublic SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource)throws Exception {final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(masterDataSource);sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATION));return sessionFactory.getObject();}}

从数据源配置类

@Configuration//扫描 Mapper 接口并容器管理@MapperScan(basePackages = {"cn.jacob.datasource.mapper.cluster"}, sqlSessionFactoryRef = "clusterSqlSessionFactory")public class ClusterDataSourceConfig {// 精确到 cluster 目录,以便跟其他数据源隔离static final String PACKAGE = "cn.jacob.datasource.mapper.cluster";static final String MAPPER_LOCATION = "classpath:mapper/**/*.xml";@Value("${cluster.datasource.url}")private String url;@Value("${cluster.datasource.username}")private String user;@Value("${cluster.datasource.password}")private String password;@Value("${cluster.datasource.driverClassName}")private String driverClass;@Bean(name = "clusterDataSource")public DataSource clusterDataSource() {DruidDataSource dataSource = new DruidDataSource();dataSource.setDriverClassName(driverClass);dataSource.setUrl(url);dataSource.setUsername(user);dataSource.setPassword(password);return dataSource;}@Bean(name = "clusterTransactionManager")public DataSourceTransactionManager clusterTransactionManager() {return new DataSourceTransactionManager(clusterDataSource());}@Bean(name = "clusterSqlSessionFactory")public SqlSessionFactory clusterSqlSessionFactory(@Qualifier("clusterDataSource") DataSource clusterDataSource)throws Exception {final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(clusterDataSource);sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATION));return sessionFactory.getObject();}}
  1. 实体类,Dao层,Service层不再概括
  2. 控制层
    便于区分创建两个控制器
@RestController@Slf4j@Api(value = "主数据源", tags = "主数据源")@RequestMapping("/username")@AllArgsConstructorpublic class UsernameController {private UsernameService usernameService;@GetMapping("/getList")@ApiOperation(value = "用户列表",notes = "用户列表")public List<Username> getList(){return usernameService.getList();}}
-----------------------------------------------------------------------------------------------------------------@RestController@Slf4j@Api(value = "从数据源", tags = "从数据源")@RequestMapping("/user")@AllArgsConstructorpublic class UserController {private UserService userService;@GetMapping("/getList")@ApiOperation(value = "用户列表",notes = "用户列表")public List<User> getList(){return userService.getList();}}

SpringBoot 配置多数据源相关推荐

  1. springboot配置Druid数据源

    springboot配置druid数据源 Author:SimpleWu springboot整合篇 前言 对于数据访问层,无论是Sql还是NoSql,SpringBoot默认采用整合SpringDa ...

  2. 关于Springboot 配置多数据源 Druid 德鲁伊

    关于Springboot 配置多数据源 Druid 德鲁伊 yml config yml server:port: 8080servlet:encoding:charset: UTF-8 spring ...

  3. SpringBoot 配置多数据源(Sql Server、MySql)

    创建SpringBoot项目就不说了.(直接使用IDEA创建就好了) 整个目录结构如图:(不用管图中报错,项目是在另一台电脑上写的.报错是没有jar包,因为网络比较慢.) 1.主要pom.xml &l ...

  4. SpringBoot配置多数据源数据库

    ** 一.SpringBoot + Druid + Mybatisplus 使用注解整合 ** 主要依赖包: spring-boot-starter-web mybatis-plus-boot-sta ...

  5. SpringBoot配置多数据源(MySQL+SQLServer)

    最近刚学习springboot,为了以后的开发需要故搭建双数据源配置,本文中使用了MySQL+SQLServer,若想在换成oracle数据库,直接在此数据配置的基础上进行再增加一个类似的配置,项目主 ...

  6. SpringBoot配置多数据源Mybatis/MybatisPlus/mysql

    一.前言 项目开发过程中,单一数据源不能满足开发需求或者需要用到主从数据库的时候,引入多数据源配置在项目中显得尤为必要.下面简单介绍一种在spingboot中结合mybatis针对同类型的数据源mys ...

  7. SpringBoot配置多数据源(结合Druid)

    在单数据源的情况下,Spring Boot的配置非常简单,只需要在application.properties文件中配置连接参数即可.但是往往随着业务量发展,我们通常会进行数据库拆分或是引入其他数据库 ...

  8. Reason: Failed to determine a suitable driver class springboot配置了数据源,启动包url找不到 Reason: Failed to

    自学springboot头疼啊,明明已经配置了数据源,但是在启动项目的时候总是报上面的错误. 网上最多的一种就是给springApplication添加 Exculed 关闭 DataAutowire ...

  9. Springboot配置Druid数据源详解

    配置数据源 1.添加Druid依赖 <!-- druid数据源--> <!-- https://mvnrepository.com/artifact/com.alibaba/drui ...

最新文章

  1. 【Verilog HDL 训练】第 11 天(分频电路)
  2. python整数类型进制表示_Python二进制、八进制、十六进制数字的表示和转换
  3. 2011.8.2号面试
  4. linux基础:用户与组,权限管理
  5. css学习_cs3s旋转的图片
  6. 解决 Alfred 每次开机都提示请求通讯录权限的问题
  7. posman使用教程
  8. python 点击按钮 click_用selenium和Python单击“onclick”按钮
  9. VUE 自定义取色器组件
  10. PC-红警联机问题与下载
  11. 第四周项目3--单链表应用之递增判断
  12. 单兵渗透工具-Yakit-Windows安装使用
  13. python中的关系运算符可以连续室友_在Python中,关系运算符可以连续使用,例如135等价于13 and 35。...
  14. python软件是什么架构_Python应用程序的最佳项目结构是什么? [关闭]
  15. element-ui 表格使用多选 如何回显打勾
  16. English trip V1 - 3.What Would you Like? Teacher:Lamb Key: would like to
  17. 算法笔记之回溯法(一)——溯洄从之,道阻且长;溯游从之,宛在水中央。
  18. 阿里云服务器代金券如何领取?阿里云高防GPU云服务器有优惠吗?
  19. 【SDCC讲师专访】腾讯潘安群:腾讯云金融级数据库TDSQL分析
  20. 怎样提高沟通表达能力?在工作中沟通有多重要?

热门文章

  1. 包含min函数的栈 python_面试题_设计包含 min函数的栈
  2. Doxygen for C++使用说明——注释代码一
  3. 第4章 Python 数字图像处理(DIP) - 频率域滤波12 - 选择性滤波 - 带阻
  4. 优集品 php,从细节处着眼 优集品打造成人世界的儿童节
  5. 拉取ftp服务器上的文件_winscp和云服务器,2步实现winscp将文件上传到腾讯云Linux云服务器...
  6. C++函数中返回引用和返回值的区别
  7. python-2:工欲善其事,必先利其器 修改jupyter保存文件目录(亲测)
  8. UVA - 572 Oil Deposits
  9. 理解文档对象模型(3)
  10. mybatis 2 -常用数据操作