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