热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringBootMybatisPlusDruid多数据源项目

写在前面:本文主要介绍SpringBootMybatisPlus和Druid这些组件下,如何创建多数据源(DataSource)的web项目。写这篇博客

写在前面:本文主要介绍SpringBoot MybatisPlus和Druid这些组件下,如何创建多数据源(DataSource)的web项目。写这篇博客的原因就是我在搜索同类型的问题的时候,其他人写的博客非常不清晰,完全无法按照介绍的步骤来实现。我希望我写的这篇博客可以真的替看这篇博客的人能解决这类问题。如果你看完之后还是没有解决可以评论留言,甚至加我的微信(JB328258)帮你解决。因为我觉得我们中国人写技术博客有的时候太敷衍了,不要把博客当成一个记事本。而是要真正对不管是行业还是同样的从业人员有价值才有意义。

背景: 我们的web项目需要读取两个数据库里面的表的数据,然后就有了这个需求。但是我在网上搜索解决方法,很多人的博客都是写的连接两个数据源,并且还通过AOP动态切换数据源,但是我认为这种使用场景应该是非常非常少的。一般情况下的应用场景都是表的数据在多个库里面。然后web项目需要读多个库的数据进行汇合。

正文:

第一步:引入对于的SpringBoot MybatisPlus Druid的Jar包。这一步不赘述,网上示例很多。

第二步:  填写多个数据源的相关配置,如JDBC的连接地址,JDBC的数据库等。

           1. cmdb代表一个数据库。

           2. compass代表一个数据库。

spring:datasource:cmdb:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://192.168.60.11:3306/cmdb_docker?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNullusername: YourXXXpassword: YourXXXinitial-size: 0min-idle: 1max-active: 20max-wait: 60000remove-abandoned: trueremove-abandoned-timeout: 180time-between-eviction-runs-millis: 60000min-evictable-idle-time-millis: 300000test-while-idle: truetest-on-borrow: falsetest-on-return: falsefilters: stat,wall,log4j2compass:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://192.168.60.11:3306/compass?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNullusername: YourXXXpassword: YourXXXinitial-size: 0min-idle: 1max-active: 20max-wait: 60000remove-abandoned: trueremove-abandoned-timeout: 180time-between-eviction-runs-millis: 60000min-evictable-idle-time-millis: 300000test-while-idle: truetest-on-borrow: falsetest-on-return: falsefilters: stat,wall,log4j2

第三步:创建对应的MybatisPlus的分页插件如下

@Configuration
public class MybatisPlusConfig {/*** 分页插件* @return*/@Beanpublic PaginationInterceptor paginationInterceptor(){PaginationInterceptor page = new PaginationInterceptor();page.setDialectType("mysql");return page;}}

第四步:分别创建两个DataSource对应的Config,注意看下面代码里面的备注,比较重要。

4.1 创建第一个DataSource的Config

//创建Compass数据的DataSource数据源
@Configuration
// basePackages 是扫描的Compass库对应的Mapper
@MapperScan(basePackages = "com.ximalaya.compass.core.mapper",sqlSessionFactoryRef = "compassFactory")
public class CompassDataSourceConfig {@AutowiredPaginationInterceptor paginationInterceptor;@Bean(name="compass")@ConfigurationProperties("spring.datasource.compass")public DataSource createCmdbDataSource(){return new DruidDataSource();}@Bean(name = "compassFactory")public SqlSessionFactory createCompassFactory(@Qualifier("compass") DataSource dataSource) throws Exception {SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();factoryBean.setDataSource(dataSource);//这里是配置Mybatis的ConfigurationMybatisConfiguration configuration = new MybatisConfiguration();configuration.setJdbcTypeForNull(JdbcType.NULL);configuration.setMapUnderscoreToCamelCase(true);configuration.setCacheEnabled(false);factoryBean.setConfiguration(configuration);//这里是添加Mybatis的分页插件factoryBean.setPlugins(new Interceptor[]{paginationInterceptor});//这里是填写Compass这个库对应的Mapper.xml文件factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis-compass/*.xml"));return factoryBean.getObject();}@Bean(name = "compassSqlSessionTemplate")public SqlSessionTemplate createCompassSqlSessionTemplate(@Qualifier("compassFactory") SqlSessionFactory sqlSessionFactory){return new SqlSessionTemplate(sqlSessionFactory);}}

4.2 创建第二个DataSource的Config

@Configuration
@MapperScan(basePackages = "com.ximalaya.compass.collector.mapper",sqlSessionFactoryRef = "cmdbFactory")
public class CmdbDockerDataSourceConfig {@AutowiredPaginationInterceptor paginationInterceptor;@Bean(name="cmdb_docker")@ConfigurationProperties("spring.datasource.cmdb")public DataSource createCmdbDataSource(){return new DruidDataSource();}@Bean(name = "cmdbFactory")public SqlSessionFactory createCmdbFactory(@Qualifier("cmdb_docker") DataSource dataSource) throws Exception {SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();factoryBean.setDataSource(dataSource);MybatisConfiguration configuration = new MybatisConfiguration();configuration.setJdbcTypeForNull(JdbcType.NULL);configuration.setMapUnderscoreToCamelCase(true);configuration.setCacheEnabled(false);factoryBean.setConfiguration(configuration);factoryBean.setPlugins(new Interceptor[]{paginationInterceptor});factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis-cmdb/*.xml"));return factoryBean.getObject();}@Bean(name = "cmdbSqlSessionTemplate")public SqlSessionTemplate createCmdbSqlSessionTemplate(@Qualifier("cmdbFactory") SqlSessionFactory sqlSessionFactory){return new SqlSessionTemplate(sqlSessionFactory);}}

结尾:至此所有的创建和修改都完成,启动SpringBoot项目使用对应的Service就可以访问对应的数据库了。


推荐阅读
  • 在使用mybatis进行mapper.xml测试的时候发生必须为元素类型“mapper”声明属性“namespace”的错误项目目录结构UserMapper和UserMappe ... [详细]
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
  • 本文详细介绍了如何使用Linux下的mysqlshow命令来查询MySQL数据库的相关信息,包括数据库、表以及字段的详情。通过本文的学习,读者可以掌握mysqlshow命令的基本语法及其常用选项。 ... [详细]
  • 本文由公众号【数智物语】(ID: decision_engine)发布,关注获取更多干货。文章探讨了从数据收集到清洗、建模及可视化的全过程,介绍了41款实用工具,旨在帮助数据科学家和分析师提升工作效率。 ... [详细]
  • STM32代码编写STM32端不需要写关于连接MQTT服务器的代码,连接的工作交给ESP8266来做,STM32只需要通过串口接收和发送数据,间接的与服务器交互。串口三配置串口一已 ... [详细]
  • Windows环境下Oracle数据库迁移实践
    本文详细记录了一次在Windows操作系统下将Oracle数据库的控制文件、数据文件及在线日志文件迁移至外部存储的过程,旨在为后续的集群环境部署做好准备。 ... [详细]
  • Java连接MySQL数据库的方法及测试示例
    本文详细介绍了如何安装MySQL数据库,并通过Java编程语言实现与MySQL数据库的连接,包括环境搭建、数据库创建以及简单的查询操作。 ... [详细]
  • 本文由chszs撰写,详细介绍了Apache Mina框架的核心开发流程及自定义协议处理方法。文章涵盖从创建IoService实例到协议编解码的具体步骤,适合希望深入了解Mina框架应用的开发者。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • binlog2sql,你该知道的数据恢复工具
    binlog2sql,你该知道的数据恢复工具 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 本文介绍了MySQL窗口函数的基本概念、应用场景及常见函数的使用方法。窗口函数在处理复杂查询时非常有用,例如计算每个用户的订单排名、环比增长率、以及动态聚合等。 ... [详细]
  • ArcBlock 发布 ABT 节点 1.0.31 版本更新
    2020年11月9日,ArcBlock 区块链基础平台发布了 ABT 节点开发平台的1.0.31版本更新,此次更新带来了多项功能增强与性能优化。 ... [详细]
  • 本文提供了处理WordPress网站中出现过多重定向问题的方法,包括检查DNS配置、安装SSL证书以及解决数据库连接错误等步骤。 ... [详细]
author-avatar
mobiledu2502926333
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有