原创

springboot + mybatis 多数据源配置

直接上代码
application.properties

#多数据源 配置

spring.datasource.master.url=jdbc:mysql://localhost:3306/test
spring.datasource.master.username=root
spring.datasource.master.password=root
spring.datasource.master.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.master.max-idle=10
spring.datasource.master.max-wait=10000
spring.datasource.master.min-idle=5
spring.datasource.master.initial-size=5
spring.datasource.master.validation-query=SELECT 1
spring.datasource.master.test-on-borrow=false
spring.datasource.master.test-while-idle=true
spring.datasource.master.time-between-eviction-runs-millis=18800

spring.datasource.slave.url=jdbc:mysql://127.15.16.14:3306/books
spring.datasource.slave.username=root
spring.datasource.slave.password=**
spring.datasource.slave.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.slave.max-idle=10
spring.datasource.slave.max-wait=10000
spring.datasource.slave.min-idle=5
spring.datasource.slave.initial-size=5
spring.datasource.slave.validation-query=SELECT 1
spring.datasource.slave.test-on-borrow=false
spring.datasource.slave.test-while-idle=true
spring.datasource.slave.time-between-eviction-runs-millis=18800

配置 MasterConfig
MasterConfig.java

import javax.sql.DataSource;
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.DataSourceBuilder;
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;
@Configuration
@MapperScan(basePackages = {"com.wzb.duoshujuyuan.dao.master"}, sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterConfig {
@Primary
@Bean(name = "masterDataSource")
@ConfigurationProperties(prefix = "spring.datasource.master")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}

@Primary
@Bean(name = "masterTransactionManager")
public DataSourceTransactionManager transactionManager(@Qualifier("masterDataSource") DataSource dataSource) {
    return new DataSourceTransactionManager(dataSource);
}

@Primary
@Bean(name = "masterSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {
    SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
    factoryBean.setDataSource(dataSource);
    factoryBean.setTypeAliasesPackage("demo.model");

    return factoryBean.getObject();
}

}

配置SlaveConfig
SlaveConfig.java

import javax.sql.DataSource;
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.DataSourceBuilder;
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;
@Configuration
@MapperScan(basePackages = {"com.wzb.duoshujuyuan.dao.slave"}, sqlSessionFactoryRef = "slaveSqlSessionFactory")
public class SlaveConfig {
@Bean(name = "slaveDataSource")
@ConfigurationProperties(prefix = "spring.datasource.slave")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}

@Bean(name = "slaveTransactionManager")
public DataSourceTransactionManager transactionManager(@Qualifier("slaveDataSource") DataSource dataSource) {
    return new DataSourceTransactionManager(dataSource);
}

@Bean(name = "slaveSqlSessionFactory")
public SqlSessionFactory basicSqlSessionFactory(@Qualifier("slaveDataSource") DataSource basicDataSource) throws Exception {
    SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
    factoryBean.setDataSource(basicDataSource);
    factoryBean.setTypeAliasesPackage("demo.model");

    return factoryBean.getObject();
}

}

@MapperScan(basePackages={"com.wzb.duoshujuyuan.dao.slave"}, sqlSessionFactoryRef = "slaveSqlSessionFactory")

这个中 basePackages中所对应的dao,这就是这个数据源中的表,如果使用这个数据源中的表,则在这个dao层里进行代码编写,master也是如此。

@ConfigurationProperties(prefix = "spring.datasource.slave") prefix 后面对应的是application.properties里面数据源的前缀,必须一致 否则报找不到url错误。

DAO层和平时一样写就ok

正文到此结束
本文目录