springboot配置多数据源,不同的数据库
1.配置文件## 2.mybatis 多数据源配置mybatis根据不同的数据源调用不同的dao和mapper文件,在这里需要把你想要被扫描的dao建在一个新的文件夹。核心代码@MapperScan(basePackages = "com.sthg.dao.pg", sqlSessionTemplateRef = "pgSqlSessionTemplate")sqlSessionTemplateR
·
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创建的格式
到此多数据源配置完成.
更多推荐
已为社区贡献1条内容
所有评论(0)