• Mybatis多数据源(一) 不同的mapper文件对应不同的数据源


    一、背景

    如果一个系统存在多个业务数据库,那么就意味着在该系统中存在多个数据源,此时针对数据库的操作如何让其具体的落地到某个库中呢?

    二、解决办法

    一个解决办法就是mybatis不同的mapper文件对应不同的数据源,这样service在操作不同的mapper时即操作了不同的数据源

    三、实现

    1、yml文件中配置多个数据源

    spring:
      datasource:
        druid:
          old:
            driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
            url: xxx
            username: xxx
            password: xxx
            initial-size: 5
            max-active: 10
            max-wait: 10000
            validationQuery: SELECT 1
          new:
            driver-class-name: com.mysql.cj.jdbc.Driver
            url: xxx
            username: xxx
            password: xxx
            initial-size: 5
            max-active: 10
            max-wait: 10000
            validationQuery: SELECT 1

    2、配置文件中配置数据源,数据库的session工厂以及事务管理器

    @Configuration
    public class DataSourceConfigNew {
    
    	/**
    	 * 返回dataSourceNew数据库的数据源
    	 */
    	@Bean(name = "dataSourceNew")
    	@Primary//主数据源
    	@ConfigurationProperties(prefix = "spring.datasource.druid.new")
    	public DataSource dataSourceNew() {
    		return new DruidDataSource();
    	}
    
    	/**
    	 * 返回dataSourceNew数据库的会话工厂
    	 */
    	@Bean(name = "dataSqlSessionFactoryNew")
    	@Primary
    	public SqlSessionFactory sqlSessionFactoryNew(@Qualifier("dataSourceNew") DataSource ds) throws Exception {
    		SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
    		bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/mapper/new/*.xml"));
    		bean.setDataSource(ds);
    		return bean.getObject();
    	}
    
    	/**
    	 * 返回dataSourceNew数据库的事务
    	 */
    	@Bean(name = "dataTransactionManagerNew")
    	@Primary
    	public DataSourceTransactionManager transactionManager1(@Qualifier("dataSourceNew") DataSource ds) {
    		return new DataSourceTransactionManager(ds);
    	}
    }

    3、为mapper文件指定对应的数据源

    @Configuration
    @MapperScan(basePackages = "com.test.mapper.newMapper", sqlSessionFactoryRef = "dataSqlSessionFactoryNew")
    public class DataSourceConfigNew {
    }
  • 相关阅读:
    java多态课后作业
    java继承与接口课后作业
    java数组课后作业
    javaString课后作业
    Java类与对象课后作业
    java方法课后作业
    java基本知识课后作业
    读《大道至简》第二章有感
    课堂作业(字符串转化并计算)
    读《大道至简》第一章有感
  • 原文地址:https://www.cnblogs.com/houchen/p/16230078.html
Copyright © 2020-2023  润新知