1. 程式人生 > 其它 >Mybatis多資料來源(一) 不同的mapper檔案對應不同的資料來源

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 { }