千家信息网

SpringBoot项目中如何同时操作多个数据库

发表于:2024-11-25 作者:千家信息网编辑
千家信息网最后更新 2024年11月25日,本篇内容主要讲解"SpringBoot项目中如何同时操作多个数据库",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"SpringBoot项目中如何同时操作多个
千家信息网最后更新 2024年11月25日SpringBoot项目中如何同时操作多个数据库

本篇内容主要讲解"SpringBoot项目中如何同时操作多个数据库",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"SpringBoot项目中如何同时操作多个数据库"吧!

在实际项目开发中可能存在需要同时操作两个数据库的场景,比如从A库读取数据,进行操作后往B库中写入数据,此时就需要进行多数据库配置。本文以操作本地和线上的MySQL数据库为例:

1、导入相关pom文件

    mysql    mysql-connector-java    runtime    org.springframework.boot    spring-boot-starter-jdbc    org.mybatis    mybatis    3.5.5    com.alibaba    druid    1.2.3    org.mybatis    mybatis-spring    2.0.7    org.projectlombok    lombok    true

二、application.yml配置文件编写

单数据源的配置如下:

spring:  datasource:    driver-class-name: com.mysql.cj.jdbc.Driver    url: jdbc:mysql://127.0.0.1:3306/meal_order?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8    username: root    password: root    type: com.alibaba.druid.pool.DruidDataSource

多数据源的配置如下:

spring:  datasource:    dev:      driver-class-name: com.mysql.cj.jdbc.Driver      jdbcUrl: jdbc:mysql://xxx.xx.xx.xx:3306/meal_order?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8      username: root      password: root      type: com.alibaba.druid.pool.DruidDataSource    local:      driver-class-name: com.mysql.cj.jdbc.Driver      jdbcUrl: jdbc:mysql://127.0.0.1:3306/db2021?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8      username: root      password: root      type: com.alibaba.druid.pool.DruidDataSource

经过对比可以发现:
1、多数据源的配置中需要指定具体的名称来区分不同的数据库(上述配置中的dev和local,名称可以根据具体需求自定义)
2、需要使用jdbcUrl代替url

三、数据库连接配置文件

dev数据源配置文件:

@Configuration@MapperScan(basePackages = "com.multiple.mapper.dev",sqlSessionFactoryRef = "devSqlSessionFactory")public class DevDataSourceConfig {    @Primary    @Bean(name = "devDataSource")    @ConfigurationProperties("spring.datasource.dev")    public DataSource masterDataSource(){        return DataSourceBuilder.create().build();    }    @Bean(name = "devSqlSessionFactory")    public SqlSessionFactory sqlSessionFactory(@Qualifier("devDataSource") DataSource dataSource) throws Exception {        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();        sessionFactoryBean.setDataSource(dataSource);        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()                .getResources("classpath:mapping/dev/*.xml"));        return sessionFactoryBean.getObject();    }}

local数据源配置文件:

@Configuration@MapperScan(basePackages = "com.multiple.mapper.local",sqlSessionFactoryRef = "localSqlSessionFactory")public class LocalDataSourceConfig {    @Primary    @Bean(name = "localDataSource")    @ConfigurationProperties("spring.datasource.local")    public DataSource masterDataSource(){        return DataSourceBuilder.create().build();    }    @Bean(name = "localSqlSessionFactory")    public SqlSessionFactory sqlSessionFactory(@Qualifier("localDataSource") DataSource dataSource) throws Exception {        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();        sessionFactoryBean.setDataSource(dataSource);        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()                .getResources("classpath:mapping/local/*.xml"));        return sessionFactoryBean.getObject();    }}

不同配置文件通过@MapperScan注解的内容来区分不同数据库下的mapper文件,通过@ConfigurationProperties注解来加载指定的数据源

以DevDataSourceConfig为例

四、主启动类注解修改

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

目录结构如下:

五、测试

从dev库中查询数据,取出字段插入local库中:

public interface DevMapper {    @Select("select * from test")    List getAllTest();}
public interface LocalMapper {    @Insert("insert into payment(serial) values (#{name})")    int insertMessage(String name);}
@SpringBootTestclass MultipleDatabaseApplicationTests {    @Autowired    private DevMapper devMapper;    @Autowired    private LocalMapper localMapper;    @Test    void contextLoads() {        List testList = devMapper.getAllTest();        for(com.multiple.pojo.Test test : testList){            localMapper.insertMessage(test.getAa());        }    }}

运行测试代码,从dev库中查出的数据可以成功添加至local库
该方法也适用需要使用多种不同的数据库的场景,比如MySQL和Oracle,修改数据源配置文件即可

到此,相信大家对"SpringBoot项目中如何同时操作多个数据库"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

数据 配置 数据库 文件 数据源 同时 项目 不同 多个 内容 注解 名称 场景 实际 方法 学习 查询 测试 实用 更深 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 一个数据库有几个文档 软件开发专员待遇 机动服务器连接失败 转回曾经服务器改名字 预测软件开发企业销售量 计算机作时钟服务器怎么设置 服务器上创建ftp ios应用软件开发服务咨询 酒店门禁sql数据库 eora数据库 管家婆软件服务器名称查找方法 怎么把图片插到数据库的表 堡垒机怎么进行数据库审计 单片机如何做一个数据库 中托车福互联网科技有点限公司 学应用软件开发要学会英语吗 博乐计量管控系统数据库在哪 浙江质量网络技术咨询产品 安卓软件开发基础语言 软件开发即征即退案例 为什么培训网络安全管理员 乐商软件开发有限公司靠谱吗 杭州海康威视网络技术有限公司 网络安全校园宣传稿 如何建造属于自己的服务器 怎么下载网易服务器 腾讯云服务器注册 机器人软件开发专业 我的世界bbs服务器宣传 杨浦区参考数据库服务商收费标准
0