1.配置文件在这里插入图片描述## 2.mybatis 多数据源配置

mybatis根据不同的数据源调用不同的dao和mapper文件,在这里需要把你想要被扫描的dao建在一个新的文件夹。

核心代码
@MapperScan(basePackages = "com.sthg.dao.pg", sqlSessionTemplateRef = "pgSqlSessionTemplate")

sqlSessionTemplateRef 指定使用哪个SqlSessionTemplate,SqlSessionTemplate是创建SqlSession的会话,SqlSessionTemplate是SqlSession的一个实现类,SqlSessionFactory是一个SqlSession的创建工厂,
SqlSessionFactory里又是注入DataSource(数据库连接配置),这里就实现了,当调用哪个dao使用哪个接口的逻辑。

数据源一配置
package com.sthg.common.config;

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;

import javax.sql.DataSource;

@Configuration
@MapperScan(basePackages = "com.sthg.dao.trino",sqlSessionTemplateRef = "appstoreSqlSessionTemplate")
public class AppstoreDataSourceConfig {

	@Bean(name="appstoreDataSource")
	@ConfigurationProperties(prefix = "spring.datasource.trino")
	public DataSource appstoreDataSource() {
		return DataSourceBuilder.create().build();
	}

	@Bean(name="appstoreSqlSessionFactory")
	public SqlSessionFactory appstoreSqlSessionFactory(@Qualifier("appstoreDataSource") DataSource dataSource) throws Exception {
		SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
		sqlSessionFactoryBean.setDataSource(dataSource);
		sqlSessionFactoryBean.setTypeAliasesPackage("com.sthg.entity");
//		sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/appstore/*.xml"));
		//开启驼峰命名
		org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
		configuration.setMapUnderscoreToCamelCase(true);
		sqlSessionFactoryBean.setConfiguration(configuration);
		return sqlSessionFactoryBean.getObject();
	}

	@Bean(name="appstoreTransactionManager")
	public DataSourceTransactionManager testTransactionManager(@Qualifier("appstoreDataSource") DataSource dataSource) {
		return new DataSourceTransactionManager(dataSource);
	}

	@Bean(name="appstoreSqlSessionTemplate")
	public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("appstoreSqlSessionFactory") SqlSessionFactory sqlSessionFactory){
		return new SqlSessionTemplate(sqlSessionFactory);
	}
}
数据源二配置
package com.sthg.common.config;


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;

import javax.sql.DataSource;
/**
 * 创建iam库的数据源
 */
@Configuration
@MapperScan(basePackages = "com.sthg.dao.clickhouse",sqlSessionTemplateRef = "iamSqlSessionTemplate")
public class IamDataSourceConfig {

	/**
	 * 加载配置数据源
	 * @return
	 * @Primary 是指具有默认值
	 */
	@Bean(name="iamDataSource")    //作用在方法上,注入;一般和@Qualifier配合使用
	@ConfigurationProperties(prefix = "spring.datasource.ck")   //指定加载哪个数据库配置
	@Primary   //是指默认值,多个数据源只能存在一个默认值,及仅能一个数据源使用该注解
	public DataSource iamDataSource() {
		return DataSourceBuilder.create().build();
	}

	/**
	 * 创建会话工厂SqlSessionFactory
	 * @param dataSource
	 * @return
	 * @throws Exception
	 */
	@Bean(name="iamSqlSessionFactory")
	@Primary
	public SqlSessionFactory iamSqlSessionFactory(@Qualifier("iamDataSource") DataSource dataSource) throws Exception {
		SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
		sqlSessionFactoryBean.setDataSource(dataSource);
		sqlSessionFactoryBean.setTypeAliasesPackage("com.sthg.entity");   //设置mybatis别名
//		sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/iam/*.xml"));
		//开启驼峰命名
		org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
		configuration.setMapUnderscoreToCamelCase(true);
		sqlSessionFactoryBean.setConfiguration(configuration);
		return sqlSessionFactoryBean.getObject();
	}

	/**
	 * 创建事务 TransactionManager
	 * @param dataSource
	 * @return
	 */
	@Bean(name="iamTransactionManager")
	@Primary
	public DataSourceTransactionManager testTransactionManager(@Qualifier("iamDataSource") DataSource dataSource) {
		return new DataSourceTransactionManager(dataSource);
	}

	/**
	 * 创建SqlSessionTemplate模版
	 * @param sqlSessionFactory
	 * @return
	 */
	@Bean(name="iamSqlSessionTemplate")
	@Primary
	public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("iamSqlSessionFactory") SqlSessionFactory sqlSessionFactory){
		return new SqlSessionTemplate(sqlSessionFactory);
	}
}
dao创建的格式

在这里插入图片描述
到此多数据源配置完成.

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐