SpringBoot如今是不少不少公司應用的後端框架,Spring Boot是一個便捷搭建 基於spring工程的腳手架;做用是幫助開發人員快速搭建大型的spring 項目。簡化工程的配置,依賴管理;實現開發人員把時間都集中在業務開發上。如今呢咱們就來聊一聊使用Spring Boot如何接入並使用多個數據源的問題.這裏呢我只寫一些主要的DataSource配置類.java
這裏先準備新建一個乾淨的SpringBoot項目作一個demo(springboot版本我這裏選擇的是2.2.2)mysql
-
-
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-starter-parent</artifactId>
-
<version>2.2.2.RELEASE</version>
-
引入主要pom文件以下:web
-
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-starter-web</artifactId>
-
-
-
<groupId>org.mybatis.spring.boot</groupId>
-
<artifactId>mybatis-spring-boot-starter</artifactId>
-
-
-
-
-
<artifactId>mysql-connector-java</artifactId>
-
-
新建application.yml配置文件,設置數據源信息spring
-
- #ty_bigdata
- spring.datasource.test1.jdbcUrl = jdbc:mysql://127.0.0.1:3306/test1?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8
- spring.datasource.test1.username = root
- spring.datasource.test1.password = root
- spring.datasource.test1.driverClassName = com.mysql.jdbc.Driver
- #test2數據庫的配置
- spring.datasource.test2.jdbcUrl = jdbc:mysql://127.0.0.1:3306/test2?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8
- spring.datasource.test2.username = root
- spring.datasource.test2.password = root
- spring.datasource.test2.driverClassName = com.mysql.jdbc.Driver
在項目目錄下新建config包,用於放數據源配置類:sql
在config包下新建DataSource1Config類:數據庫
-
- 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 = "cn.vernall.mapper.test1", sqlSessionFactoryRef = "test1SqlSessionFactory")
- public class DataSource1Config {
- @Bean(name = "test1DataSource")
- @ConfigurationProperties(prefix = "spring.datasource.test1")
- @Primary
- public DataSource testDataSource() {
- return DataSourceBuilder.create().build();
- }
-
- @Bean(name = "test1SqlSessionFactory")
- @Primary
- public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource) throws Exception {
- SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
- bean.setDataSource(dataSource);
- return bean.getObject();
- }
-
- @Bean(name = "test1TransactionManager")
- @Primary
- public DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource") DataSource dataSource) {
- return new DataSourceTransactionManager(dataSource);
- }
-
- @Bean(name = "test1SqlSessionTemplate")
- @Primary
- public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
- return new SqlSessionTemplate(sqlSessionFactory);
- }
}
其中@primary註解是用來表示當前數據源爲默認數據源,沒有特別指定的狀況下項目使用的數據源爲被該註解修飾的數據源,@primary必須要有而且只能修飾一個數據源,否則會有異常.apache
在config包下新建DataSource2Config類後端
import org.apache.ibatis.session.SqlSessionFactoryspringboot
import org.mybatis.spring.SqlSessionFactoryBean;session
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 = "cn.vernall.mapper.test2", sqlSessionFactoryRef = "test2SqlSessionFactory")
public class DataSource2Config {
@Bean(name = "test2DataSource")
@ConfigurationProperties(prefix = "spring.datasource.test2")
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "test2SqlSessionFactory")
@Primary
public SqlSessionFactory testSqlSessionFactory(@Qualifier("test2DataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
return bean.getObject();
}
@Bean(name = "test2TransactionManager")
@Primary
public DataSourceTransactionManager testTransactionManager(@Qualifier("test2DataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "test2SqlSessionTemplate")
@Primary
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
springboot項目整合數據源到此結束,歡迎各位大神補充修改