springboot+mybatis+多数据源
所需的依赖
<!--连接mysql数据库-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--链接池配置 阿里巴巴连接驱动 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.13</version>
</dependency>
<!--引入mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
application.properties配置多数据源连接及连接池
#配置多数据源
spring.datasource.primary.jdbc-url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8 &serverTimezone=Asia/Shanghai
spring.datasource.primary.username=root
spring.datasource.primary.password=root
spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driver
########################### cbh数据库 ##########################
#配置多数据源
spring.datasource.secondary.jdbc-url=jdbc:mysql://127.0.0.1:3306/cbh?useUnicode=true&characterEncoding=utf8 &serverTimezone=Asia/Shanghai
spring.datasource.secondary.username=root
spring.datasource.secondary.password=root
spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver
#不使用默认的配置源
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.initialSize=2
spring.datasource.minIdle=1
spring.datasource.maxActive=20
spring.datasource.maxWait=60000
配置多数据源的核心配置
连接test主数据库的配置
@Primary //用于标记主数据源,除了主数据源外,其余注入文件都不添加该注解
@MapperScan(basePackages = “com.example.demo.dao.primary”, sqlSessionTemplateRef = “PrimarySessionTemplate”) 其中basePackages 表示连接mybatis连接数据库时,本数据源的作用范围
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;
@Configuration
@MapperScan(basePackages = "com.example.demo.dao.primary", sqlSessionTemplateRef = "PrimarySessionTemplate")
public class PrimaryDataSourceConfig {
@Bean(name = "PrimaryDataSource") //作为一个bean对象并命名
@ConfigurationProperties(prefix = "spring.datasource.primary") //配置文件中,该数据源的前缀
@Primary //用于标记主数据源,除了主数据源外,其余注入文件都不添加该注解
public DataSource PrimaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "PrimarySessionFactory")
@Primary
public SqlSessionFactory PrimarySessionFactory(@Qualifier("PrimaryDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
return bean.getObject();
}
@Bean(name = "PrimaryTransactionManager")
@Primary
public DataSourceTransactionManager PrimaryTransactionManager(@Qualifier("PrimaryDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "PrimarySessionTemplate")
@Primary
public SqlSessionTemplate PrimarySessionTemplate(@Qualifier("PrimarySessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
连接cbh数据库的配置(从数据库)
@Configuration
@MapperScan(basePackages = "com.example.demo.dao.secondary", sqlSessionTemplateRef = "SecondarySessionTemplate")
public class SecondaryDataSourceConfig {
@Bean(name = "SecondaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.secondary")
// @Primary
public DataSource SecondaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "SecondarySessionFactory")
// @Primary
public SqlSessionFactory SecondarySessionFactory(@Qualifier("SecondaryDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
return bean.getObject();
}
@Bean(name = "SecondaryTransactionManager")
// @Primary
public DataSourceTransactionManager SecondaryTransactionManager(@Qualifier("SecondaryDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "SecondarySessionTemplate")
// @Primary
public SqlSessionTemplate SecondarySessionTemplate(@Qualifier("SecondarySessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
项目结构及项目代码
mybatis连接数据库的操作
连接主数据库的操作
我放在com.example.demo.dao.primary目录下,连接的是test数据库
@Repository
public interface TuserDao {
//查看所有Tuser信息
@Select("select * from t_user")
List<Tuser> getListOfTuser();
}
连接次数据库的操作
我放在com.example.demo.dao.secondary目录下,连接的是cbh数据库
@Repository
public interface CBHDao {
@Select("select id,name,phone,uuid,login_pwd from t_user")
@Results({
@Result(column = "login_pwd", property = "pwd")
})
List<Tuser> getListOfTuserByCBH();
}
控制层
操作test数据库
@Autowired
private TuserService tuserServiceimpl;
@GetMapping("/test/getListOfTuser")
public Object getListOfTuser(){
List<Tuser> list=tuserServiceimpl.getListOfTuser();
return list;
}
操作cbh数据库
@Autowired
private CBHService cbhServiceimpl;
@GetMapping("/cbh/getListOfTuserByCBH")
public Object getListOfTuserByCBH(){
List<Tuser> list=cbhServiceimpl.getListOfTuserByCBH();
return "list的记录数"+list.size();
}
多数据源结果显示
连接test数据库的操作:http://localhost:8080/test/getListOfTuser
连接cbh数据库的操作:http://localhost:8080/cbh/getListOfTuserByCBH