第一步引入依赖
<!-- alibaba的druid数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.16</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>12.2.0.1</version>
</dependency>
<!-- SpringBoot集成mybatis框架 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
第二步项目结构搭建
1: dao 层 区分 master 主 与 slave 从。 写的就用 master, 读的就用 slave, 数据库一般是读写分离的。
2: mapping 也区分 master 主 与 slave 从.
3: config 配置文件一个数据源配置一个文件 master 主 与 slave 从.
三: 数据源配置
datasource.master 主库
datasource.slave 从库
四; 数据源配置文件, @Primary 代表默认数据源,必须有一个
1: master 主
package com.htcf.config;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
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 javax.sql.DataSource;
/**
* 主数据源
*/
@Configuration
@MapperScan(basePackages = {"com.htcf.dao.master"}, sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterDataSourceConfig {
/**
* 创建dataSource
* @return
*/
@Bean( name = "master")
@ConfigurationProperties(prefix = "spring.datasource.master.druid") //注入配置master
public DataSource getDataSource()
{
return DruidDataSourceBuilder.create().build();
}
/**
* datasource 注入sqlsessionFactory
*/
@Bean(name = "masterSqlSessionFactory")
public SqlSessionFactory masterSqlSessionFactory(@Qualifier("master") DataSource dataSource)throws Exception
{
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
//注入数据源
bean.setDataSource(dataSource);
//扫描对应的mapper.xml路径
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapping/masterMapping/*.xml"));
org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
configuration.setMapUnderscoreToCamelCase(true);
bean.setConfiguration(configuration);
return bean.getObject();
}
/**
* sqlsessionFactory 注入 sqlsessionTemplate
* @param sqlSessionFactory
* @return
*/
@Bean("masterSqlSessionTemplate")
public SqlSessionTemplate masterSqlSessionTemplate(@Qualifier("masterSqlSessionFactory") SqlSessionFactory sqlSessionFactory)
{
return new SqlSessionTemplate(sqlSessionFactory);
}
}
2 从数据源配置:
package com.htcf.config;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
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 javax.sql.DataSource;
/**
* 从数据源
*/
@Configuration
@MapperScan(basePackages = {"com.htcf.dao.slave"}, sqlSessionFactoryRef = "slaveSqlSessionFactory")
public class SlaveDataSourceConfig {
/**
* 创建dataSource
* @return
*/
@Primary
@Bean( name = "slave")
@ConfigurationProperties(prefix = "spring.datasource.slave.druid") //从数据源
public DataSource getDataSource()
{
return DruidDataSourceBuilder.create().build();
}
/**
* datasource 注入sqlsessionFactory
*/
@Primary
@Bean(name = "slaveSqlSessionFactory")
public SqlSessionFactory slaveSqlSessionFactory(@Qualifier("slave") DataSource dataSource)throws Exception
{
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
//注入数据源
bean.setDataSource(dataSource);
//扫描对应的mapper.xml路径
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapping/slaveMapping/*.xml"));
org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
configuration.setMapUnderscoreToCamelCase(true);
bean.setConfiguration(configuration);
return bean.getObject();
}
/**
* sqlsessionFactory 注入 sqlsessionTemplate
* @param sqlSessionFactory
* @return
*/
@Primary
@Bean("slaveSqlSessionTemplate")
public SqlSessionTemplate slaveSqlSessionTemplate(@Qualifier("slaveSqlSessionFactory") SqlSessionFactory sqlSessionFactory)
{
return new SqlSessionTemplate(sqlSessionFactory);
}
}