当前位置: 首页 > news >正文

(详细)Springboot 整合动态多数据源 这里有mysql(分为master 和 slave) 和oracle,根据不同路径适配不同数据源

文章目录

    • Springboot 整合多动态数据源 这里有mysql(分为master 和 slave) 和oracle
      • 1. 引入相关的依赖
      • 2. 创建相关配置文件
      • 3. 在相关目录下进行编码,不同路径会使用不同数据源

Springboot 整合多动态数据源 这里有mysql(分为master 和 slave) 和oracle

1. 引入相关的依赖

  <!--动态数据源--><dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>${dynamic-datasource.version}</version></dependency><!-- mysql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- oracle --><dependency><groupId>com.oracle.database.jdbc</groupId><artifactId>ojdbc6</artifactId><version>${ojdbc.version}</version></dependency>

2. 创建相关配置文件

package com.aspire.sc.base.data.config;import javax.sql.DataSource;import org.springframework.beans.factory.annotation.Qualifier;//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;@Configuration
public class DataSourceConfig {@Bean(name = "master")@Qualifier("master")@Primary@ConfigurationProperties(prefix="spring.datasource.dynamic.datasource.master")public DataSource primaryDataSource(){return DataSourceBuilder.create().build();}@Bean(name = "slave")@Qualifier("slave")@ConfigurationProperties(prefix="spring.datasource.dynamic.datasource.slave")public DataSource slave(){return DataSourceBuilder.create().build();}@Bean(name = "oracleDataSource")@Qualifier("oracleDataSource")@ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.oracle")public DataSource oracleDataSource(){return DataSourceBuilder.create().build();}}
package com.aspire.sc.base.data.config;import com.aspire.common.dictenum.DictBaseEnum;
import com.aspire.common.dictenum.DictBaseItem;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.type.JdbcType;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;/*** 数据库leadnews_article*/
@Configuration
public class MysqlDataSourceConfig {@Bean@Primarypublic SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("master") DataSource dataSource) throws Exception {return createSqlSessionFactory(dataSource);}@Beanpublic SqlSessionFactory mysqlSlaveSqlSessionFactory(@Qualifier("slave") DataSource dataSource) throws Exception {return createSqlSessionFactory(dataSource);}private SqlSessionFactory createSqlSessionFactory(DataSource dataSource) throws Exception {MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();sqlSessionFactory.setDataSource(dataSource);MybatisConfiguration configuration = new MybatisConfiguration();configuration.setJdbcTypeForNull(JdbcType.NULL);configuration.setMapUnderscoreToCamelCase(true);configuration.setCacheEnabled(false);// 添加分页功能PaginationInterceptor paginationInterceptor = new PaginationInterceptor();sqlSessionFactory.setPlugins(new Interceptor[]{paginationInterceptor});sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*/*.xml"));sqlSessionFactory.setTypeHandlersPackage("com.aspire.common.constant");sqlSessionFactory.setTypeEnumsPackage("com.aspire.common.constant," +"com.aspire.sc.base.data.domain.*.pojo," +"com.aspire.sc.base.data.constant");return sqlSessionFactory.getObject();}@Bean@Primarypublic SqlSessionTemplate mysqlSqlSessionTemplate(@Qualifier("mysqlSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {return new SqlSessionTemplate(sqlSessionFactory);}@Bean(name = "masterTransactionManager")@Primarypublic DataSourceTransactionManager masterTransactionManager(@Qualifier("master") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}@Bean(name = "slaveTransactionManager")public DataSourceTransactionManager slaveTransactionManager(@Qualifier("slave") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}
}
package com.aspire.sc.base.data.config;import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
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.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;@Configuration
//@MapperScan(basePackages = "com.aspire.sc.base.data.oracledomain.*", sqlSessionFactoryRef = "oracleSqlSessionFactory")
public class OracleDataSourceConfig {@Bean(name = "oracleSqlSessionFactory")public SqlSessionFactory oracleSqlSessionFactory(@Qualifier("oracleDataSource") DataSource dataSource) throws Exception {MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();sqlSessionFactory.setDataSource(dataSource);sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:oraclemapper/*.xml"));return sqlSessionFactory.getObject();}@Beanpublic SqlSessionTemplate oracleSqlSessionTemplate(@Qualifier("oracleSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {return new SqlSessionTemplate(sqlSessionFactory);}@Bean(name = "oracleTransactionManager")public DataSourceTransactionManager oracleTransactionManager(@Qualifier("oracleDataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}
}

启动文件加上:

import com.baomidou.dynamic.datasource.plugin.MasterSlaveAutoRoutingPlugin;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.transaction.annotation.EnableTransactionManagement;/*** @author wanggh*/
@EnableConfigurationProperties
@ComponentScan({"com.aspire"})
@EnableTransactionManagement(proxyTargetClass = true)@MapperScan(basePackages = {"com.aspire.sc.base.data.domain.*.mapper"}, sqlSessionFactoryRef = "mysqlSqlSessionFactory")
@MapperScan(basePackages = {"com.aspire.sc.base.data.oracledomain.mapper"}, sqlSessionFactoryRef = "oracleSqlSessionFactory")
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@ServletComponentScan
@EnableCaching
public class MsBaseDataApplication {public static void main(String[] args) {SpringApplication.run(MsBaseDataApplication.class, args);}/*** 纯的读写分离环境,写操作全部是master,读操作全部是slave* 默认主库名称master,从库名称slave。* 不用加@DS注解*/@Beanpublic MasterSlaveAutoRoutingPlugin masterSlaveAutoRoutingPlugin() {return new MasterSlaveAutoRoutingPlugin();}}

3. 在相关目录下进行编码,不同路径会使用不同数据源

在这里插入图片描述

http://www.lryc.cn/news/525683.html

相关文章:

  • mock可视化生成前端代码
  • Spring Boot(6)解决ruoyi框架连续快速发送post请求时,弹出“数据正在处理,请勿重复提交”提醒的问题
  • 鸿蒙Harmony json转对象(1)
  • 常见的RocketMQ面试题及其简要答案
  • C#Object类型的索引,序列化和反序列化
  • Unity3D项目开发中的资源加密详解
  • 微调Qwen2:7B模型,加入未知信息语料
  • 【Ubuntu】安装SSH启用远程连接
  • 【理论】测试开发工程师进阶路线
  • 【BQ3568HM开发板】如何在OpenHarmony上通过校园网的上网认证
  • 動態住宅IP提升網站訪問成功率
  • 2024年博客之星主题创作|2024年蓝桥杯与数学建模年度总结与心得
  • Spring Boot/MVC
  • 由于请求的竞态问题,前端仔喜提了一个bug
  • 【Day25 LeetCode】贪心Ⅲ
  • 蓝桥杯练习日常|递归-进制转换
  • AI Agent:深度解析与未来展望
  • 《SwinIR:使用Swin-Transformer图像恢复》学习笔记
  • 如何在Nginx服务器上配置访问静态文件目录并提供文件下载功能
  • ansible自动化运维实战--script、unarchive和shell模块(6)
  • 理解深度学习pytorch框架中的线性层
  • 电路研究9.2——合宙Air780EP使用AT指令
  • Qt数据库相关操作
  • 2025-01-22 Unity Editor 1 —— MenuItem 入门
  • 解锁C#编程新姿势:Z.ExtensionMethods入门秘籍
  • 不使用 JS 纯 CSS 获取屏幕宽高
  • Node.js NativeAddon 构建工具:node-gyp 安装与配置完全指南
  • 【ARTS】【LeetCode-704】二分查找算法
  • Vue.js 配置路由:基本的路由匹配
  • 鸿蒙(HarmonyOS)Json格式转实体对象(2)