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

SpringBoot使用SqlSessionFactory方式配置多数据源

场景:

一个项目操作多个数据库

解决方法:

通过SqlSessionFactory指定的数据源来操作指定目录的XML文件

实现:

1.项目结构:
在这里插入图片描述
2.pom文件

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>mssql-jdbc</artifactId><scope>runtime</scope></dependency>
<!--    SpringBoot集成mybatis plus框架 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis.plus.version}</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--常用工具类 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId></dependency></dependencies>

3.配置yml文件

server:port: 9099spring:application:name: kingdee-datadatasource:kingdee-middle:driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriverjdbc-url: jdbc:sqlserver://localhost:1433;databaseName=kingdee;Persist Security Info=True;Connection Timeout=30username: rootpassword: rootgfy:driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriverjdbc-url: jdbc:sqlserver://localhost:1433;databaseName=gfy;Persist Security Info=True;Connection Timeout=30username: rootpassword: rootgfy-002:driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriverjdbc-url: jdbc:sqlserver://localhost:1433;databaseName=gfy-002;Persist Security Info=True;Connection Timeout=30username: rootpassword: rootgfy-005:driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriverjdbc-url: jdbc:sqlserver://localhost:1433;databaseName=gfy-005;Persist Security Info=True;Connection Timeout=30username: rootpassword: rootmybatis-plus:mapper-locations: classpath*:mapper/**/*Mapper.xmltype-aliases-package: com.sys.kingdeedata.*configuration:#开启驼峰映射map-underscore-to-camel-case: falsecall-setters-on-nulls: true#开启复杂映射auto-mapping-behavior: full
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpllog-impl: org.apache.ibatis.logging.slf4j.Slf4jImplcache-enabled: trueuse-generated-keys: truedefault-executor-type: simple#配置全局默认主键类型,实体类就不用加 @TableId(value = "id", type = IdType.AUTO)global-config:db-config:id-type: auto

4.创键读取第一个数据库配置文件配置类并设置为主配置类

package com.sys.kingdeedata.common.config;import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
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 org.springframework.transaction.PlatformTransactionManager;import javax.sql.DataSource;@Configuration
@MapperScan(basePackages = {"com.sys.kingdeedata.mapper.gfy"}, sqlSessionFactoryRef = "gfySqlSessionFactory")
public class GfyMybatisConfig {@Bean(name = "gfyDataSource")@ConfigurationProperties(prefix = "spring.datasource.gfy")public DataSource dataSource() {return DataSourceBuilder.create().build();}/*** 配置事务管理器,不然事务不起作用** @return*/@Beanpublic PlatformTransactionManager transactionManager() {return new DataSourceTransactionManager(this.dataSource());}@Primary@Bean(name = "gfySqlSessionFactory")public SqlSessionFactory sqlSessionFactory(@Qualifier("gfyDataSource") DataSource dataSource) throws Exception {SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(dataSource);sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/gfy/*.xml"));sqlSessionFactoryBean.setTypeAliasesPackage("com.sys.kingdeedata.entity");sqlSessionFactoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);return sqlSessionFactoryBean.getObject();}
}

5.有几个数据源就依次创建几个配置类

package com.sys.kingdeedata.common.config;import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
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 org.springframework.transaction.PlatformTransactionManager;import javax.sql.DataSource;@Configuration
@MapperScan(basePackages = {"com.sys.kingdeedata.mapper.gfy002"}, sqlSessionFactoryRef = "gfy002SqlSessionFactory")
public class Gfy002MybatisConfig {@Bean(name = "gfy002DataSource")@ConfigurationProperties(prefix = "spring.datasource.gfy002")public DataSource dataSource() {return DataSourceBuilder.create().build();}/*** 配置事务管理器,不然事务不起作用** @return*/
//    @Bean
//    public PlatformTransactionManager transactionManager() {
//        return new DataSourceTransactionManager(this.dataSource());
//    }@Bean(name = "gfy002SqlSessionFactory")public SqlSessionFactory sqlSessionFactory(@Qualifier("gfy002DataSource") DataSource dataSource) throws Exception {SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(dataSource);sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/gfy002/*.xml"));sqlSessionFactoryBean.setTypeAliasesPackage("com.sys.kingdeedata.entity");sqlSessionFactoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);return sqlSessionFactoryBean.getObject();}
}

6.在mapper包下按照配置创建对应的包,针对Mapper层通过SqlSessionFactory指定数据源来操作。


http://www.mrgr.cn/news/53202.html

相关文章:

  • python中的WEEKNUM(ISO周数获取)
  • Oracle 使用位图索引 Cost降低200倍! 探讨位图索引的利与弊
  • 传感器黑电平箝位(Sensor black level clamping)
  • Python 处理命令行参数
  • Java 后端开发面试题及其答案
  • HTTP/HTTPS
  • 【数据结构与算法】插入排序、希尔排序
  • Oracle T5-2 ILOM配置
  • 存在重复元素 II
  • HarmonyOS NEXT和认证(在校生的大福利)
  • Pycharm下载安装教程(详细步骤)+汉化设置教程
  • 基于SSM+微信小程序的电子点餐管理系统(点餐1)
  • 【YOLO学习】YOLOv5详解
  • 【第三版 系统集成项目管理工程师】第18章 职业道德规范
  • 力扣力扣力:一文搞定前序遍历的所有方法!
  • 使用kimi编辑助手,开始搭建一个微信小程序!第一天
  • Cisco软件基础使用
  • 原型链+instanceof+Vue底层原理
  • windows无法启动RemoteDesktopServices服务(位于本地计算机上)。错误126:找不到指定的模块
  • 关于我、重生到500年前凭借C语言改变世界科技vlog.6——函数