首页 > 其他分享 >SpringBoot配置多数据源实战

SpringBoot配置多数据源实战

时间:2024-11-14 22:40:19浏览次数:1  
标签:实战 Exception return SpringBoot 数据源 springframework dataSource import org

@

目录

SpringBoot配置多数据源实战

需求来源:

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

简单粗暴3步使用步骤:

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

思路讲解:

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

目录结构:


使用注意点:

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);
    }
}

重要信息

标签:实战,Exception,return,SpringBoot,数据源,springframework,dataSource,import,org
From: https://www.cnblogs.com/bigcat26/p/18547009

相关文章

  • 面试必备41道 SpringBoot 面试题
    博主介绍上海交大毕业,大厂资深Java后端工程师《Java全套学习资料》作者专注于系统架构设计和高并发解决方案和面试辅导阿里云开发社区乘风者计划专家博主@author[vx]vip1024p(备注java)/***@author[vx]vip1024p(备注java)*@【描述:浏览器打开】docs.qq.com/doc/DUk......
  • 基于Java+SpringBoot+Mysql在线课程学习教育系统功能设计与实现九
    一、前言介绍:免费获取:猿来入此1.1项目摘要随着信息技术的飞速发展和互联网的普及,教育领域正经历着深刻的变革。传统的面对面教学模式逐渐受到挑战,而在线课程学习教育系统作为一种新兴的教育形式,正逐渐受到广泛关注和应用。在线课程学习教育系统的出现,不仅为学生提供了更加灵......
  • 基于Java+SpringBoot+Mysql在线课程学习教育系统功能设计与实现十
    一、前言介绍:免费获取:猿来入此1.1项目摘要随着信息技术的飞速发展和互联网的普及,教育领域正经历着深刻的变革。传统的面对面教学模式逐渐受到挑战,而在线课程学习教育系统作为一种新兴的教育形式,正逐渐受到广泛关注和应用。在线课程学习教育系统的出现,不仅为学生提供了更加灵......
  • 毕业设计_基于springboot+vue的学校赛事管理系统【前后端源码+SQL+可运行】【41015】
    毕业设计_基于springboot+vue的学校赛事管理系统【前后端源码+SQL+可运行】【41015】.zip下载地址:https://download.csdn.net/download/qq_24428851/89982585环境准备:JDK1.8+maven3.6+nodejs14+mysql5.6+redis技术栈后台:springboot+mybatisPlus+Shiro前台:vue+iview+Vu......
  • 毕业设计_基于springboot+vue的学校赛事管理系统【前后端源码+SQL+可运行】【41015】
    毕业设计_基于springboot+vue的学校赛事管理系统【前后端源码+SQL+可运行】【41015】.zip下载地址:https://download.csdn.net/download/qq_24428851/89982585环境准备:JDK1.8+maven3.6+nodejs14+mysql5.6+redis技术栈后台:springboot+mybatisPlus+Shiro前台:vue+iview+Vu......
  • 毕业设计_基于springboot+vue的学校赛事管理系统【前后端源码+SQL+可运行】【41015】
    毕业设计_基于springboot+vue的学校赛事管理系统【前后端源码+SQL+可运行】【41015】.zip下载地址:https://download.csdn.net/download/qq_24428851/89982585环境准备:JDK1.8+maven3.6+nodejs14+mysql5.6+redis技术栈后台:springboot+mybatisPlus+Shiro前台:vue+iview+Vu......
  • 书生实战营第四期-基础岛第六关-OpenCompass 评测书生大模型实践
    基础任务一、使用OpenCompass评测浦语API 1、创建用于评测conda环境condacreate-nopencompasspython=3.10condaactivateopencompasscd/rootgitclone-b0.3.3https://github.com/open-compass/opencompasscdopencompasspipinstall-e.pipinstall......
  • uniapp路由与页面跳转详解:API调用与Navigator组件实战
    UniApp路由与页面跳转详解:API调用与Navigator组件实战路由uniapp页面路由为框架统一管理,开发者需要在page.json里面配置每个路由页面的路径及页面样式。路由跳转uniapp有两种页面路由跳转方式,调用API跳转和navigator组件跳转。调用API跳转navTo(){ /*跳转到非tabbar......
  • SpringBoot快速入门
    一、SpringBoot简介SpringBoot是由Pivotal团队提供的全新框架,旨在简化Spring应用的初始搭建以及开发过程。它基于SpringFramework构建,但并不是Spring的替代者或精简版本,而是为了让程序员更好地使用Spring。SpringBoot通过提供默认配置和“习惯优于配置”的理念,使得开发者......
  • 告别头文件,编译效率提升 42%!C++ Modules 实战解析
    编者按:AlibabaCloudLinux(简称“Alinux”)是目前阿里云上占比第一的操作系统。2021年,龙蜥以Alinux产品为基础发布了AnolisOS8正式版。本文中,阿里云智能集团开发工程师李泽政以Alinux为操作环境,讲解模块相比传统头文件有哪些优势,并通过若干个例子,学习如何组织一个C++模......