Spring-boot+Durid+mybatis的多数据源集成方案

2025-06-06 07:44:20

1、创建两个数据库,一个数据库名为ideadb,作为主数据库,负责数据的插入和更新操作,另一个数据库为ideadb-r为从数据库,只负责数据的读取操作。提示:可以通过mysqldump实现数据库的同步复制

Spring-boot+Durid+mybatis的多数据源集成方案
Spring-boot+Durid+mybatis的多数据源集成方案
Spring-boot+Durid+mybatis的多数据源集成方案

2、在Spring-boot的应用配置文件application.properties中配置两个数据源信息:## master 数据源配置spring.datasource.master.type=com.alibaba.druid.pool.DruidDataSourcespring.datasource.master.url=jdbc:mysql://127.0.0.1:3306/ideadbspring.datasource.master.username=rootspring.datasource.master.password=hxbspring.datasource.master.driverClassName=com.mysql.jdbc.Driver## slave 数据源配置spring.datasource.slave.type=com.alibaba.druid.pool.DruidDataSourcespring.datasource.slave.url=jdbc:mysql://127.0.0.1:3306/ideadb-rspring.datasource.slave.username=rootspring.datasource.slave.password=hxbspring.datasource.slave.driverClassName=com.mysql.jdbc.Driver

Spring-boot+Durid+mybatis的多数据源集成方案

3、创建数据源配置类DSConfig,实现多数据源的初始化操作,在该类中构建了两个数据源bean对象masterDS和slaveDS;package fantasy.datasource;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 javax.sql.DataSource;/** * Created by Administrator on 2017/8/22 0022. */@Configurationpublic class DSConfig { @Bean(name = "masterDS") @ConfigurationProperties(prefix = "spring.datasource.master") public DataSource dataSourceMaster() { return DataSourceBuilder.create().build(); } @Bean(name = "slaveDS") @ConfigurationProperties(prefix = "spring.datasource.slave") public DataSource dataSourceSlave() { return DataSourceBuilder.create().build(); }}

Spring-boot+Durid+mybatis的多数据源集成方案

4、配置mapper包下的数据操作类对应的数据源1)MasterDataSourceConfig亿姣灵秀类:masterDS应用于fantasy.dao.maste包下的所有mapper接口类pa艘早祓胂ckage fantasy.datasource;import com.alibaba.druid.pool.DruidDataSource;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.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.beans.factory.annotation.Value;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;import javax.sql.DataSource;@Configuration//fantasy.dao.master包下的mapper类使用该数据源@MapperScan(basePackages = MasterDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "masterSqlSessionFactory")public class MasterDataSourceConfig { static final String PACKAGE = "fantasy.dao.master"; @Autowired @Qualifier("masterDS") private DataSource masterDS; @Bean public SqlSessionFactory masterSqlSessionFactory() throws Exception { SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(masterDS); return factoryBean.getObject(); } @Bean public SqlSessionTemplate sqlSessionTemplateMaster() throws Exception { SqlSessionTemplate template = new SqlSessionTemplate(masterSqlSessionFactory()); return template; }}2)SlaveDataSourceConfig类:slaveDS应用于fantasy.dao.slave包下的所有mapper接口类package fantasy.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.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import javax.sql.DataSource;@Configuration//fantasy.dao.slave包下的mapper类使用该数据源@MapperScan(basePackages = SlaveDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "slaveSqlSessionFactory")public class SlaveDataSourceConfig { static final String PACKAGE = "fantasy.dao.slave"; @Autowired @Qualifier("slaveDS") private DataSource slaveDS; @Bean public SqlSessionFactory slaveSqlSessionFactory() throws Exception { SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(slaveDS); return factoryBean.getObject(); } @Bean public SqlSessionTemplate sqlSessionTemplateMaster() throws Exception { SqlSessionTemplate template = new SqlSessionTemplate(slaveSqlSessionFactory()); return template; }}

Spring-boot+Durid+mybatis的多数据源集成方案

5、使用主数据源masterDS操作数据表,对应的mapper接口类:IdeaMapperpackage fantasy.dao.master;import fantasy.dao.Idea;import org.apache.ibatis.annotations.Mapper;import org.apache.ibatis.annotations.Param;import org.apache.ibatis.annotations.Select;import org.apache.ibatis.annotations.Update;/** * Created by Administrator on 2017/8/13 0013. */@Mapperpublic interface IdeaMapper { @Select("SELECT * FROM IDEA WHERE id = #{id}") Idea findById(@Param("id") String id); @Update("update idea set name=#{name} where id=#{id}") boolean updateById(@Param("id") String id,@Param("name") String name);}

Spring-boot+Durid+mybatis的多数据源集成方案

6、使用只读数据源slaveDS查询数据表,对应的mapper接口类:IdeaReadonlyMapperpackage fantasy.dao.slave;import fantasy.dao.Idea;import org.apache.ibatis.annotations.Mapper;import org.apache.ibatis.annotations.Param;import org.apache.ibatis.annotations.Select;/** * Created by Administrator on 2017/8/13 0013. */@Mapperpublic interface IdeaReadonlyMapper { @Select("SELECT * FROM IDEA WHERE id = #{id}") Idea findById(@Param("id") String id);}

7、在spring-boot主应用类中调用mapper接口类进行测试BulkAppli罕铞泱殳cation注明:需要在主应用类中通过注解方式禁用spring自动默认的数据源初始化@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class //将spring boot自带的DataSourceAutoConfiguration禁掉})**************package fantasy;import fantasy.dao.master.IdeaMapper;import fantasy.dao.slave.IdeaReadonlyMapper;import org.springframework.boot.CommandLineRunner;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;import org.springframework.boot.web.servlet.ServletComponentScan;/** * Created by Administrator on 2017/8/13 0013. */@ServletComponentScan@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class //将spring boot自带的DataSourceAutoConfiguration禁掉})public class BulkApplication implements CommandLineRunner { private final IdeaMapper ideaMapper; private final IdeaReadonlyMapper ideaReadonlyMapperMapper; public BulkApplication(IdeaMapper ideaMapper,IdeaReadonlyMapper ideaReadonlyMapperMapper) { this.ideaMapper = ideaMapper; this.ideaReadonlyMapperMapper = ideaReadonlyMapperMapper; } @Override public void run(String... strings) throws Exception { System.out.println("************************************"); System.out.println("@masterdb:before update B001"+this.ideaMapper.findById("B001")); this.ideaMapper.updateById("B001","F4轰炸机" ); System.out.println("@Masterdb:after update B001"+this.ideaMapper.findById("B001")); System.out.println("************************************"); System.out.println("@SlaveDB:B001"+this.ideaReadonlyMapperMapper.findById("B001")); System.out.println("************************************"); } public static void main(String[] args) { SpringApplication.run(BulkApplication.class, args); }}

Spring-boot+Durid+mybatis的多数据源集成方案
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢