SpringBoot配置多数据源实战

简介: 第四届光学与机器视觉国际学术会议(ICOMV 2025)2025 4th International Conference on Optics and Machine Vision

@[TOC]

SpringBoot配置多数据源实战

需求来源:

当相关业务场景想实现同时操作2个甚至多个不同数据库表的时候,就需要配置多个数据源。

简单粗暴3步使用步骤:

1.修改包名结构
2.application.properties配置2套数据源,注意加前缀
3.修改DataSourceOmniConfig里面的注解@MapperScan和@Bean(name = "transactionManager")即可,其他不用改可直接使用

思路讲解:

springboot默认支持一个数据库,所以可简写(具体参照自己项目即可),但是当想实现配置多数据源的时候,application.properties配置文件需要修改前缀,用于自定义工厂进行扫描产生Bean

目录结构:

image.png
image.png

使用注意点:

1.DataSourceOmniConfig和DataSourcePlatformConfig中,其中一个要使用注解@Primary,代表哪个是主要的数据源
2.使用只需修改其中的注解属性@MapperScan(basePackages=xxxx)
3.主要数据源中事务那里要改成这样@Bean(name = "transactionManager"),不改会报错显示缺少事务支持
4.配置文件中url前要加jdbc,例如spring.datasource01.jdbc-url
DataSourceOmniConfig

package com.geespace.omni.datasource;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

/**
 * 表示这个类为一个配置类,配置Mybatis的接口类放的地方
 * @author: liudz
 * @date: 2020/8/13
 */
@Configuration
@MapperScan(basePackages = "com.geespace.omni.dao.database1", sqlSessionFactoryRef = "db01SqlSessionFactory")
public class DataSourceOmniConfig {
   

    /**
     * 将这个对象放入Spring容器中,读取application.properties中的配置参数映射成为一个对象,prefix表示参数的前缀
     * @author: liudz
     * @date: 2020/8/13
     * @return 执行结果
     */
    @Bean(name = "db01DataSource")
    @ConfigurationProperties(prefix = "spring.datasource01")
    @Primary
    public DataSource testDataSource() {
   
        return DataSourceBuilder.create().build();
    }

    /**
     * 将这个对象放入Spring容器中
     * @param dataSource dataSource
     * @author: liudz
     * @date: 2020/8/13
     * @return 执行结果
     * @throws Exception Exception
     */
    @Bean(name = "db01SqlSessionFactory")
    @Primary
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("db01DataSource") DataSource dataSource)
          throws Exception {
   
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource((dataSource));
        return bean.getObject();
    }

    /**
     * 将这个对象放入Spring容器中
     * @param dataSource dataSource
     * @author: liudz
     * @date: 2020/8/13
     * @return 执行结果
     * @throws Exception Exception
     */
    @Bean(name = "transactionManager")
    @Primary
    public DataSourceTransactionManager testTransactionManager(@Qualifier("db01DataSource") DataSource dataSource) {
   
        return new DataSourceTransactionManager(dataSource);
    }

    /**
     * 将这个对象放入Spring容器中
     * @param sqlSessionFactory sqlSessionFactory
     * @author: liudz
     * @date: 2020/8/13
     * @return 执行结果
     * @throws Exception Exception
     */
    @Bean(name = "db01SqlSessionTemplate")
    @Primary
    public SqlSessionTemplate testSqlSessionTemplate(
        @Qualifier("db01SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
   
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}
DataSourcePlatformConfig

package com.geespace.omni.datasource;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;


/**
 * 表示这个类为一个配置类, 配置Mybatis的接口类放的地方
 * @author: liudz
 * @date: 2020/8/13
 */
@Configuration
@MapperScan(basePackages = "com.geespace.omni.dao.database2", sqlSessionFactoryRef = "db02SqlSessionFactory")
public class DataSourcePlatformConfig {
   

    /**
     *
     * @author liudz
     * @date 2020/8/13
     * @return 执行结果
     **/
    @Bean(name = "db02DataSource")
    @ConfigurationProperties(prefix = "spring.datasource02")
    public DataSource testDataSource() {
   
        return DataSourceBuilder.create().build();
    }

    /**
     * @param dataSource dataSource
     * @author liudz
     * @date 2020/8/13
     * @return 执行结果
     * @throws Exception Exception
     **/
    @Bean(name = "db02SqlSessionFactory")
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("db02DataSource") DataSource dataSource)
            throws Exception {
   
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource((dataSource));
        return bean.getObject();
    }

    /**
     * @param dataSource dataSource
     * @author liudz
     * @date 2020/8/13
     * @return 执行结果
     **/
    @Bean(name = "db02TransactionManager")
    public DataSourceTransactionManager testTransactionManager(@Qualifier("db02DataSource") DataSource dataSource) {
   
        return new DataSourceTransactionManager(dataSource);
    }

    /**
     * @param sqlSessionFactory sqlSessionFactory
     * @author liudz
     * @date 2020/8/13
     * @return 执行结果
     * @throws Exception Exception
     **/
    @Bean(name = "db02SqlSessionTemplate")
    public SqlSessionTemplate testSqlSessionTemplate(
            @Qualifier("db02SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
   
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

image.png

重要信息

image.png
image.png
image.png

目录
相关文章
|
2月前
|
Java Spring
Spring Boot配置的优先级?
在Spring Boot项目中,配置可通过配置文件和外部配置实现。支持的配置文件包括application.properties、application.yml和application.yaml,优先级依次降低。外部配置常用方式有Java系统属性(如-Dserver.port=9001)和命令行参数(如--server.port=10010),其中命令行参数优先级高于系统属性。整体优先级顺序为:命令行参数 > Java系统属性 > application.properties > application.yml > application.yaml。
559 0
|
9天前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
154 4
|
16天前
|
传感器 Java 数据库
探索Spring Boot的@Conditional注解的上下文配置
Spring Boot 的 `@Conditional` 注解可根据不同条件动态控制 Bean 的加载,提升应用的灵活性与可配置性。本文深入解析其用法与优势,并结合实例展示如何通过自定义条件类实现环境适配的智能配置。
探索Spring Boot的@Conditional注解的上下文配置
|
1月前
|
安全 算法 Java
在Spring Boot中应用Jasypt以加密配置信息。
通过以上步骤,可以在Spring Boot应用中有效地利用Jasypt对配置信息进行加密,这样即使配置文件被泄露,其中的敏感信息也不会直接暴露给攻击者。这是一种在不牺牲操作复杂度的情况下提升应用安全性的简便方法。
674 10
|
6月前
|
Java 关系型数据库 数据库
微服务——SpringBoot使用归纳——Spring Boot事务配置管理——Spring Boot 事务配置
本文介绍了 Spring Boot 中的事务配置与使用方法。首先需要导入 MySQL 依赖,Spring Boot 会自动注入 `DataSourceTransactionManager`,无需额外配置即可通过 `@Transactional` 注解实现事务管理。接着通过创建一个用户插入功能的示例,展示了如何在 Service 层手动抛出异常以测试事务回滚机制。测试结果表明,数据库中未新增记录,证明事务已成功回滚。此过程简单高效,适合日常开发需求。
912 0
|
2月前
|
人工智能 安全 Java
Spring Boot yml 配置敏感信息加密
本文介绍了如何在 Spring Boot 项目中使用 Jasypt 实现配置文件加密,包含添加依赖、配置密钥、生成加密值、在配置中使用加密值及验证步骤,并提供了注意事项,确保敏感信息的安全管理。
772 1
|
6月前
|
Java 数据库连接 数据库
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——MyBatis 介绍和配置
本文介绍了Spring Boot集成MyBatis的方法,重点讲解基于注解的方式。首先简述MyBatis作为持久层框架的特点,接着说明集成时的依赖导入,包括`mybatis-spring-boot-starter`和MySQL连接器。随后详细展示了`properties.yml`配置文件的内容,涵盖数据库连接、驼峰命名规范及Mapper文件路径等关键设置,帮助开发者快速上手Spring Boot与MyBatis的整合开发。
854 0
|
druid Java 关系型数据库
SpringBoot 的多数据源配置
SpringBoot 的多数据源配置
2212 0
SpringBoot 的多数据源配置
|
NoSQL Java 关系型数据库
SpringBoot多数据源配置
在实际的开发或者线上环境中,一般都不仅仅是一个数据库走天下,而是根据业务进行拆分多个数据库,今天就来学习如何对springboot进行多数据源配置。
495 0
SpringBoot多数据源配置
|
Java Spring 数据库连接