SpringBoot 多数据源
一、配置数据源
@Configuration @Slf4j public class DataSourceConfig { @Bean(name = "datasource1") @Primary @Qualifier("datasource1") @ConfigurationProperties(prefix="spring.datasource.datasource1" ) public DataSource datasource1() { log.info("datasource1数据库连接创建中......."); return DataSourceBuilder.create().type(HikariDataSource.class).build(); } @Bean(name = "datasource2") @Qualifier("datasource2") @ConfigurationProperties(prefix="spring.datasource.datasource2") public DataSource datasource2() { log.info("datasource2数据库连接创建中......"); return DataSourceBuilder.create().type(HikariDataSource.class).build(); } @Bean(name = "datasource3") @Qualifier("datasource3") @ConfigurationProperties(prefix="spring.datasource.datasource3") public DataSource datasource1() { log.info("datasource3数据库连接创建中......"); return DataSourceBuilder.create().type(HikariDataSource.class).build(); } }
二、配置Factory
@Configuration //该注解的参数对应的类必须存在,否则不解析该注解修饰的配置类 @ConditionalOnClass({ SqlSessionFactory.class, SqlSessionFactoryBean.class }) public class MybatisConfig { //第一个数据源 @Configuration @MapperScan(basePackages = {"com.common.boot..datasource1.mapper*"}, sqlSessionFactoryRef = "datasource1cloudSqlSessionFactory") public static class DataSource1MybatisConfig{ private final DataSource dataSource; public CloudMybatisConfig(@Qualifier("dataSource1") DataSource dataSource) { this.dataSource = dataSource; } //创建SqlSessionFactory @Bean public SqlSessionFactory datesource1SqlSessionFactory() throws Exception { SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(dataSource); factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources("classpath:/mappers/datasource1/*Mapper.xml")); return factoryBean.getObject(); } //利用SqlSessionFactory创建SqlSessionTemplate @Bean public SqlSessionTemplate datasource1SqlSessionTemplate() throws Exception { return new SqlSessionTemplate(datasource1SqlSessionFactory()); } //事务 @Bean public PlatformTransactionManager cloudTransactionManager(){ return new DataSourceTransactionManager(dataSource); } } //第二个数据源 @Configuration @MapperScan(basePackages = {"com.common.boot.datasource2.mapper.*"}, sqlSessionFactoryRef = "datesource2SqlSessionFactory") public static class Datesource2MybatisConfig{ private final DataSource dataSource; public HubMybatisConfig(@Qualifier("dataSource2") DataSource dataSource) { this.dataSource = dataSource; } //创建SqlSessionFactory @Bean public SqlSessionFactory datasource2SqlSessionFactory() throws Exception { SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(dataSource); factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources("classpath:/mappers/datasource2/*.xml")); //factoryBean.setConfigLocation(new ClassPathResource("/mapper/mybatis-config.xml")); return factoryBean.getObject(); } //利用SqlSessionFactory创建SqlSessionTemplate @Bean public SqlSessionTemplate datasource2SqlSessionTemplate() throws Exception { return new SqlSessionTemplate(datasource2SqlSessionFactory()); } //事务 @Bean public PlatformTransactionManager datasource2TransactionManager(){ return new DataSourceTransactionManager(dataSource); } } //第三个数据源 @Configuration @MapperScan(basePackages = {"com.common.boot.dataSource3.mapper.*"}, sqlSessionFactoryRef = "datasource3SqlSessionFactory") public static class Datasource3MybatisConfig{ private final DataSource dataSource; public Datasource3MybatisConfig(@Qualifier("dataSource3") DataSource dataSource) { this.dataSource = dataSource; } //创建SqlSessionFactory @Bean public SqlSessionFactory changatSqlSessionFactory() throws Exception { SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(dataSource); factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources("classpath:/mappers/datasource3/*.xml")); //factoryBean.setConfigLocation(new ClassPathResource("/mapper/mybatis-config.xml")); return factoryBean.getObject(); } //利用SqlSessionFactory创建SqlSessionTemplate @Bean public SqlSessionTemplate datasource3SqlSessionTemplate() throws Exception { return new SqlSessionTemplate(datasource3SqlSessionFactory()); } //事务 @Bean public PlatformTransactionManager datasource3TransactionManager(){ return new DataSourceTransactionManager(dataSource); } } }
三、application.yml配置
spring: datasource: datasource1: type: com.zaxxer.hikari.HikariDataSource jdbc-url: jdbc:mysql://****:3306/****?useunicode=true&characterEncoding=utf8 username: user password: pass driver-class-name: com.mysql.cj.jdbc.Driver datasource2: type: com.zaxxer.hikari.HikariDataSource jdbc-url: jdbc:mysql://****:3306/*****?useunicode=true&characterEncoding=utf8 username: user password: pass driver-class-name: com.mysql.cj.jdbc.Driver changat: type: com.zaxxer.hikari.HikariDataSource jdbc-url: jdbc:mysql://***:3306/***?useUnicode=true&characterEncoding=utf-8 username: user password: pass driver-class-name: com.mysql.cj.jdbc.Driver #hikari数据库连接池 hikari: pool-name: PtaService_HikariCP minimum-idle: 100 #最小空闲连接数量 idle-timeout: 180000 #空闲连接存活最大时间,默认600000(10分钟) maximum-pool-size: 300 #连接池最大连接数,默认是10 auto-commit: true #此属性控制从池返回的连接的默认自动提交行为,默认值:true max-lifetime: 60000 #此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟 connection-timeout: 30000 #数据库连接超时时间,默认30秒,即30000 connection-test-query: SELECT 1
浙公网安备 33010602011771号