上次写过一个采用AOP 模式和注解方式在一个mapper中配置不同数据源的方式:Spring boot 使用druid 多数据源 读写分离配置与调用 注解方式
这是我们改用 不同mapper调用不同数据源的写法
目录结构如下:
config
SlaveDataSourceConfig.java
MasterDataSourceConfig.java
mapper
master
MasterCustomerMapper.java
slave
SlaveCustomerMapper.java
配置SlaveDataSourceConfig.java ,并已读为主,Bean添加 @Primary
package cn.test.fmrs.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.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 = {"cn.test.fmrs.infrastructure.mapper.slave"}, sqlSessionFactoryRef = "slaveFcsSqlSessionFactory")
public class SlaveDataSourceConfig {
@Primary
@Bean(name = "slaveFcsDataSource")
@ConfigurationProperties(prefix = "spring.datasource.druid.slave")
public DataSource dataSource() {
return DruidDataSourceBuilder.create().build();
}
@Primary
@Bean(name = "slaveFcsSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("slaveFcsDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
//如果使用了 mapper.xml的方式写sql则需要添加资源
//PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver = new PathMatchingResourcePatternResolver();
//sqlSessionFactoryBean.setMapperLocations(pathMatchingResourcePatternResolver.getResources("classpath*:/mybatis/*.xml"));
return sqlSessionFactoryBean.getObject();
}
@Primary
@Bean(name = "slaveFcsSqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("slaveFcsSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
MasterDataSourceConfig类似, 去掉其中的 @Primary, 并替换其中slave为master
剩下的就只需要在对应的 package 下面创建mapper就可以了。
(453)