广告
返回顶部
首页 > 资讯 > 数据库 >springboot 多mysql,多oracle,多mongodb数据源
  • 567
分享到

springboot 多mysql,多oracle,多mongodb数据源

oraclemongodbspringbootmysql数据库 2023-10-25 19:10:29 567人浏览 独家记忆
摘要

目录 前言 一、springboot yml文件配置 三、mysql 和oracle 多数据源的切换 四、测试方法的调用 五、mongodb多数据源配置 六、mongodb 测试方法的调用 总结 前言 最近的工作中要做数据的迁移,用的数据

目录

前言

一、springboot yml文件配置

三、mysql 和oracle 多数据源的切换

四、测试方法的调用

五、mongodb多数据源配置

六、mongodb 测试方法的调用

总结


前言

最近的工作中要做数据的迁移,用的数据库有 两个Mysql库,两个oracle库,两个mongoDB库。需要把一个主mysql库的数据迁移到oracel,中途需要关联查询 mysql库,oralce库,monGodb库从中取业务数据。先做个简单的demo 研究一下多数据源。


一、SpringBoot yml文件配置

application.yml 配置如下:

server:
    port: 8080

test1-datasource:
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/database1?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
    username: root
    passWord: 123456
test2-datasource:
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/database2?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
    username: root
    password: 123456
test3-datasource:
    driverClassName: oracle.jdbc.driver.OracleDriver
    url: jdbc:oracle:thin:@ (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=xxx)(PORT=61512))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=xxx)))
    username: root
    password: 123456
test4-datasource:
    driverClassName: oracle.jdbc.driver.OracleDriver
    url: jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx)(PORT=61512))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=xxx)))
    username: root
    password: 123456
#数据库连接池
# mongodb多数据源
spring:
  data:
    mongodb:
      one:
        uri: mongodb://localhost:27017/test
        database: test
      two:
        uri: mongodb://localhost:27017/test1
        database: test1


二、mysql 和oracle多数据源的配置

主要有以下五步:

1 根据yml中的配置创建数据源 DataSource

2 设置动态数据源DynamicDataSource

3 mapper 扫描配置 MapperScannerConfigurer

4 根据数据源创建SqlSessionFactory

5 配置事务管理器DataSourceTransactionManager

代码如下:

@Configuration // 该注解类似于spring配置文件public class mybatisConfig implements EnvironmentAware {    private Environment environment;    @Override    public void setEnvironment(final Environment environment) {        this.environment = environment;    }        @Bean    public DataSource test1DataSource() throws Exception {        Properties props = new Properties();        props.put("driverClassName", environment.getProperty("test1-datasource.driverClassName"));        props.put("url", environment.getProperty("test1-datasource.url"));        props.put("username", environment.getProperty("test1-datasource.username"));        props.put("password", environment.getProperty("test1-datasource.password"));        return DruidDataSourceFactory.createDataSource(props);    }    @Bean    public DataSource test2DataSource() throws Exception {        Properties props = new Properties();        props.put("driverClassName", environment.getProperty("test2-datasource.driverClassName"));        props.put("url", environment.getProperty("test2-datasource.url"));        props.put("username", environment.getProperty("test2-datasource.username"));        props.put("password", environment.getProperty("test2-datasource.password"));        return DruidDataSourceFactory.createDataSource(props);    }        @Bean    public DataSource test3DataSource() throws Exception {    Properties props = new Properties();    props.put("driverClassName", environment.getProperty("test3-datasource.driverClassName"));    props.put("url", environment.getProperty("test3-datasource.url"));    props.put("username", environment.getProperty("test3-datasource.username"));    props.put("password", environment.getProperty("test3-datasource.password"));    return DruidDataSourceFactory.createDataSource(props);    }        @Bean    public DataSource test4DataSource() throws Exception {        Properties props = new Properties();        props.put("driverClassName", environment.getProperty("test4-datasource.driverClassName"));        props.put("url", environment.getProperty("test4-datasource.url"));        props.put("username", environment.getProperty("test4-datasource.username"));        props.put("password", environment.getProperty("test4-datasource.password"));        return DruidDataSourceFactory.createDataSource(props);    }        @Bean    @Primary    public DynamicDataSource dataSource(@Qualifier("test1DataSource") DataSource test1DataSource,            @Qualifier("test2DataSource") DataSource test2DataSource,            @Qualifier("test3DataSource") DataSource test3DataSource,            @Qualifier("test4DataSource") DataSource test4DataSource            ) {        Map targetDataSources = new HashMap<>();        targetDataSources.put(DatabaseType.test1, test1DataSource);        targetDataSources.put(DatabaseType.test2, test2DataSource);        targetDataSources.put(DatabaseType.test3, test3DataSource);        targetDataSources.put(DatabaseType.test4, test4DataSource);        DynamicDataSource dataSource = new DynamicDataSource();        dataSource.setTargetDataSources(targetDataSources);// 该方法是AbstractRoutingDataSource的方法        dataSource.setDefaultTargetDataSource(test2DataSource);// 默认的datasource设置为myTestDbDataSource        return dataSource;    }    @Bean    public MapperScannerConfigurer mapperScannerConfigurer() {        MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();        scannerConfigurer.setBasePackage("com.xing.mapper");        Properties props = new Properties();        props.setProperty("mappers", "tk.mybatis.mapper.common.Mapper");//        props.setProperty("IDENTITY", "MYSQL"); 既有mysql 又有oracle        props.setProperty("notEmpty", "true");        scannerConfigurer.setProperties(props);        return scannerConfigurer;    }        @Bean    public SqlSessionFactory sqlSessionFactory(DynamicDataSource ds) throws Exception {        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();        SqlSessionFactoryBean fb = new SqlSessionFactoryBean();        fb.setDataSource(ds);// 指定数据源(这个必须有,否则报错)        // 下边两句仅仅用于*.xml文件,如果整个持久层操作不需要使用到xml文件的话(只用注解就可以搞定),则不加        fb.setTypeAliasesPackage("com.xing.model");// 指定基包        fb.setMapperLocations(resolver.getResources("classpath:mapper*.xml"));//        return fb.getObject();    }        @Bean    public DataSourceTransactionManager transactionManager(DynamicDataSource dataSource) throws Exception {        return new DataSourceTransactionManager(dataSource);    }}


三、mysql 和oracle 多数据源的切换

这里定义一个切面,根据不同的数据源的对应service动态切换。

代码如下:

@Aspect@Componentpublic class DataSourceAspect {        @Pointcut("execution(* com.xing.service.**.*(..))")    public void declareJointPointExpression() {    }    @Before("declareJointPointExpression()")    public void setDataSourceKey(JoinPoint point){        //根据连接点所属的类实例,动态切换数据源        if (point.getTarget() instanceof Test1Service                || point.getTarget() instanceof Test1ServiceImpl) {            DatabaseContextHolder.setDatabaseType(DatabaseType.test1);        }         else if (point.getTarget() instanceof Test3Service                || point.getTarget() instanceof Test3ServiceImpl) {         DatabaseContextHolder.setDatabaseType(DatabaseType.test3);        }        else if (point.getTarget() instanceof Test4Service                || point.getTarget() instanceof Test4ServiceImpl) {            DatabaseContextHolder.setDatabaseType(DatabaseType.test4);        }        else {//连接点所属的类实例是(当然,这一步也可以不写,因为defaultTargertDataSource就是该类所用的mytestdb)            DatabaseContextHolder.setDatabaseType(DatabaseType.test2);        }    }}

四、测试方法的调用

代码如下:

@RestControllerpublic class TestDataSourceController {    @Autowired    private CommonService commonService;    @RequestMapping(value = "/test1", method = RequestMethod.GET)    public List selectUser() {        System.out.println("查询第一个数据源");        List list = commonService.selectUserInfo();        System.out.println(JSON.tojsONString(list));        return list;    }    @RequestMapping(value = "/test2", method = RequestMethod.GET)    public List userDetail() {        System.out.println("查询第二个数据源");        List list = commonService.selectUserDetail();        System.out.println(JSON.toJSONString(list));        return list;    }    @RequestMapping(value = "/test3", method = RequestMethod.GET)    public List user() {    System.out.println("查询第三个数据源");        List list = commonService.selectUser();        System.out.println(JSON.toJSONString(list));        return list;    }    @RequestMapping(value = "/test4", method = RequestMethod.GET)    public List userOrT1() {        System.out.println("查询第四个数据源");        List list = commonService.selectUserOrT1();        System.out.println(JSON.toJSONString(list));        return list;    }}

五、mongodb多数据源配置

分两个MongoTemplateConf配置,OneMongoTemplateConf配置第一个mongodb数据源,TwoMongoTemplateConf 配置第二个mongodb数据源。主要分两步: 第一步获取yml配置后创建MongoDatabaseFactory ,然后在创建MongoTemplate ,给bean 取个名。

OneMongoTemplateConf代码如下:

@Configuration@EnableMongoRepositories(mongoTemplateRef = "oneMongo")public class OneMongoTemplateConf implements EnvironmentAware{    private Environment environment;    @Override    public void setEnvironment(final Environment environment) {        this.environment = environment;    }        @Bean(name = "oneMongo")    @Primary    public MongoTemplate mongoTemplate() {        return new MongoTemplate(mongoDatabaseFactory());    }        @Bean(name = "oneMongoFactory")    @Primary    public MongoDatabaseFactory mongoDatabaseFactory() {        MongoClient client = MongoClients.create(environment.getProperty("spring.data.mongodb.one.uri"));        return new SimpleMongoClientDatabaseFactory(client, environment.getProperty("spring.data.mongodb.one.database"));    }}

TwoMongoTemplateConf 代码如下:

@Configuration@EnableMongoRepositories(mongoTemplateRef = "twoMongo")public class TwoMongoTemplateConf implements EnvironmentAware{    private Environment environment;    @Override    public void setEnvironment(final Environment environment) {        this.environment = environment;    }        @Bean(name = "twoMongo")    public MongoTemplate mongoTemplate() {        return new MongoTemplate(mongoDatabaseFactory());    }        @Bean(name = "twoMongoFactory")    public MongoDatabaseFactory mongoDatabaseFactory() {        MongoClient client = MongoClients.create(environment.getProperty("spring.data.mongodb.two.uri"));        return new SimpleMongoClientDatabaseFactory(client, environment.getProperty("spring.data.mongodb.two.database"));    }}

六、mongodb 测试方法的调用

注入MongoTemplate,注入时 需要用@Qualifier 注解指定用哪个MongoTemplate 实例。

代码如下:

    @Autowired    @Qualifier("oneMongo")    private MongoTemplate oneMongoTemplate;    @Autowired    @Qualifier("twoMongo")    private MongoTemplate twoMongoTemplate;        @RequestMapping("/mongo1")    public String testOneMongoInsert() {        Map data = Maps.newHashMap();        Map info = Maps.newHashMap();        data.put("name", "cgg");        data.put("attr", "one");        info.put("age" , 18);        data.put("info", info);//        oneMongoTemplate.insert(data, "inventory_27017");        List list = oneMongoTemplate.findAll(Map.class, "inventory_27017");        System.out.println(JSON.toJSONString(list));        return JSON.toJSONString(list);    }        @RequestMapping("/mongo2")    public String testTwoMongoInsert() {        Map data = Maps.newHashMap();        Map info = Maps.newHashMap();        data.put("name", "cgg");        data.put("attr", "two");        info.put("age" , 18);        data.put("info", info);//        twoMongoTemplate.insert(data, "inventory_27018");        List list = twoMongoTemplate.findAll(Map.class, "inventory_27018");        System.out.println(JSON.toJSONString(list));        return JSON.toJSONString(list);    }

总结

以上就是今天要讲的内容,具体完整的项目代码已放到GitHub上。

完整项目代码已在github上:github代码

来源地址:https://blog.csdn.net/weixin_43171875/article/details/128834266

您可能感兴趣的文档:

--结束END--

本文标题: springboot 多mysql,多oracle,多mongodb数据源

本文链接: https://www.lsjlt.com/news/442737.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • springboot 多mysql,多oracle,多mongodb数据源
    目录 前言 一、springboot yml文件配置 三、mysql 和oracle 多数据源的切换 四、测试方法的调用 五、mongodb多数据源配置 六、mongodb 测试方法的调用 总结 前言 最近的工作中要做数据的迁移,用的数据...
    99+
    2023-10-25
    oracle mongodb spring boot mysql 数据库
  • SpringBoot Mybatis 多数据源 MySQL+Oracle+Redis
     一、背景 在SpringBoot Mybatis 项目中,需要连接 多个数据源,连接多个数据库,需要连接一个MySQL数据库和一个Oracle数据库和一个Redis 二、依赖 pom.xml or...
    99+
    2023-09-20
    spring boot mybatis mysql
  • springboot+mybatis实现mysql和oracle多数据源
    1.aop+注解方式 在实际项目中很多时候会涉及到多个数据库的访问,或者数据库读写分离的形式。 下面通过使用 Aspect+注解来实现mysql+oracle的多数据源配置(注意:事务一致性未提供) 首先要去oracle官网下载ojdbc的...
    99+
    2023-09-05
    spring boot mybatis mysql oracle 后端
  • ruoyi(若依)配置多数据源(mysql+postgresql),rouyi(Springboot)多数据源设置
    一、除了MySQL驱动,我们还需要用到postgresql的驱动,所以我们先把驱动的依赖给导入进来 org.postgresql postgresql ...
    99+
    2023-08-17
    mysql postgresql spring boot
  • springboot多数据源配置
    简介 开发当中经常会遇到需要进行多库多表数据整合的需求,在无法拆分项目的情况下,就需要在一个项目中配置多数据源,实现多库数据的整合。本文是在springboot框架的基础上进行的多数据源配置,可参考,也欢迎指正 1、第一步:applicat...
    99+
    2023-08-24
    spring boot mybatis java database
  • springboot整合mybatis-plus、clickhouse、mysql多数据源
    springboot的多数据源有多种方式,本文按照指定不同dao/mapper.xml的方式来实现访问不同的数据源。这样的好处是不用注解去切换数据源。 1、引入驱动 com.alibaba...
    99+
    2023-09-05
    mybatis spring boot mysql clickhouse
  • springboot+mybatis实现多数据源
    1. 前言 最近做项目碰到了一个需要连4个不同数据库的需求,其中db1、db2表结构都不相同;另外两个数据库same_db_private、same_db_public表结构完全相同,一个对内一个对外...
    99+
    2023-09-11
    mybatis spring boot java
  • SpringBoot第27讲:SpringBoot集成MySQL - MyBatis 多个数据源
    SpringBoot第27讲:SpringBoot集成MySQL - MyBatis 多个数据源 本文是SpringBoot第27讲,在某些场景下,Springboot需要使用多个数据源,以及某些...
    99+
    2023-09-02
    spring boot mysql 多数据源 AOP 读写分离
  • 【Java】SpringBoot MybatisPlus 连接多数据源(Mysql、SQL Server)
    1. 前言 连接多数据源的场景非常多哈,比如读写分离,多业务库报表。 2. 环境准备 JDK1.8Mysql 8.0 (主库)SQL Server 2008 R2(老业务系统)JetBrains ID...
    99+
    2023-08-31
    java mysql spring boot
  • springboot怎么配置多数据源
    在Spring Boot中配置多个数据源可以通过以下步骤来实现: 在pom.xml文件中添加Spring Boot对多数据源的支...
    99+
    2023-10-23
    springboot
  • SpringBoot集成多数据源解析
    一,前面我们介绍了springboot的快速启动,大家肯定对springboot也有所了解,下面我们来介绍一下springboot怎么集成多数据源。在有的项目开发中需要在一个项目中访问多个数据源或者两个项目之间通信(实质上是互相访问对方的数...
    99+
    2023-05-30
    spring boot 多数据源
  • SpringBoot如何搭建多数据源
    这篇文章主要为大家展示了“SpringBoot如何搭建多数据源”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SpringBoot如何搭建多数据源”这篇文章吧。首先我们建立两个数据库(可以不在同一...
    99+
    2023-06-21
  • SpringBoot多数据库连接(mysql+oracle)的实现
    出于业务需求,有时我们需要在spring boot web应用程序中配置多个数据源并连接到多个数据库。 使用过Spring Boot框架的小伙伴们,想必都发现了Spring Boot...
    99+
    2022-11-11
  • SpringBoot +DynamicDataSource如何切换多数据源
    小编给大家分享一下SpringBoot +DynamicDataSource如何切换多数据源,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!刚开始用一个数...
    99+
    2023-06-26
  • SpringBoot多数据源集成的方法
    这篇文章主要介绍了SpringBoot多数据源集成的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot多数据源集成的方法文章都会有所收获,下面我们一起来看看吧。一、多数据源使用场景与弊端1....
    99+
    2023-06-30
  • springboot中如何配置多数据源
    这期内容当中小编将会给大家带来有关springboot中如何配置多数据源,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、建库建表1.1 创建数据库db1和数据库db21.2 在数据库db1中创建表db1...
    99+
    2023-06-15
  • springboot整合druid及多数据源配置
    前言 本篇主要分两部分 ①springboot整合druid的代码配置,以及druid的监控页面演示;②对实际场景中多数据源的配置使用进行讲解。 一、springboot整合druid的演示demo 可以用idea快速生成一个可运行的dem...
    99+
    2023-10-24
    spring boot java spring
  • springboot下配置多数据源的方法
    一、springboot 简介SpringBoot使开发独立的,产品级别的基于Spring的应用变得非常简单,你只需"just run"。 我们为Spring平台及第三方库提 供开箱即用的设置,这样你就可以有条不紊地开始。多...
    99+
    2023-05-31
    spring boot 多数据源
  • 教你使用springboot配置多数据源
    目录一、建库建表1.1 创建数据库db1和数据库db21.2 在数据库db1中创建表db11.3 在数据库db2中创建表db2二、创建springboot项目2.1 pom.xml导...
    99+
    2022-11-12
  • springboot mybatis druid配置多数据源教程
    目录1、项目代码结构2、导入基本依赖3、配置多数据源4、配置类5、启动类6、测试使用的表7、测试表对应的实体类8、持久层:dao层接口1、项目代码结构 2、导入基本依赖 记得需要导...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作