spring boot本来最初设计是为独体服务,可是现实中的业务需求使用中却不够用,需要进行多连接数据源使用,以下为开发过程使用的案例
1、数据源自定义配置
spring:
datasource1:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/1009-test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=UTC
username: root
password: root
datasource2:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://124.221.234.168:3306/bills?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=UTC
username: root
password: root
2、数据源配置自定义
2、1数据源自定义配置1
package com.wxz.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.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import javax.annotation.Resource;
import javax.sql.DataSource;
/**
* TODO
*
* @author wxz
* @date 2022/5/17 22:52
*/
@Configuration
@MapperScan(basePackages = "com.wxz.masterMapper",sqlSessionFactoryRef = "sqlSessionFactory1")
public class DataSourceConfig1 {
@Bean
@ConfigurationProperties("spring.datasource1")
@Primary //springboot自定义所有的多中间件多数据源操作,必须指明一个主要的
public DataSourceProperties dataSourceProperties(){
return new DataSourceProperties();
}
@Bean("dataSource1")
@Primary
public DataSource dataSource(){
DataSourceProperties dataSourceProperties = dataSourceProperties();
return dataSourceProperties.initializeDataSourceBuilder().build();
}
@Bean("txTransManager1")
@Resource
@Primary
public PlatformTransactionManager txTransManager(@Qualifier("dataSource1")DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
@Bean("sqlSessionFactory1")
@Primary
@Resource
public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource1")DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
sqlSessionFactory.setDataSource(dataSource);
//加载xml配置文件
sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().
getResources("classpath*:mapper/*.xml"));
return sqlSessionFactory.getObject();
}
@Bean("sqlSessionTemplate1")
@Primary
@Resource
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlSessionFactory1")SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
}
2、2数据源自定义配置2
package com.wxz.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.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import javax.annotation.Resource;
import javax.sql.DataSource;
/**
* TODO
*
* @author wxz
* @date 2022/5/17 23:01
*/
@Configuration
@MapperScan(basePackages = "com.wxz.slaveMapper",sqlSessionFactoryRef = "sqlSessionFactory2")
public class DataSourceConfig2 {
@Bean
@ConfigurationProperties("spring.datasource2")
public DataSourceProperties dataSourceProperties2(){
return new DataSourceProperties();
}
@Bean("dataSource2")
public DataSource dataSource2(){
DataSourceProperties dataSourceProperties = dataSourceProperties2();
return dataSourceProperties.initializeDataSourceBuilder().build();
}
@Bean("sqlSessionFactory2")
public SqlSessionFactory sqlSessionFactory2(@Qualifier("dataSource2")DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
sqlSessionFactory.setDataSource(dataSource);
sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().
getResources("classpath*:mapper/*.xml"));
return sqlSessionFactory.getObject();
}
@Bean("txTransManager2")
@Resource
public PlatformTransactionManager txTransManager2(@Qualifier("dataSource2")DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
@Bean("sqlSessionTemplate2")
@Resource
public SqlSessionTemplate sqlSessionTemplate2(@Qualifier("sqlSessionFactory2")SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
}
3、接口测试访问
项目目录
启动类
这样就可以通过不同的mapper来调用不同的数据源,实现多数据源的查询