企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
首先,我们新建一个数据库`guns_test`,并分别在`guns`数据库和`guns_test`数据库中分别新增同样结构的两个表`test`,sql文件如下,也可以在`src/test/sql`下找到这个sql文件 ``` DROP DATABASE IF EXISTS guns_test; CREATE DATABASE IF NOT EXISTS guns_test DEFAULT CHARSET utf8 COLLATE utf8_general_ci; use guns_test; SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for test -- ---------------------------- DROP TABLE IF EXISTS `test`; CREATE TABLE `test` ( `aaa` int(11) NOT NULL AUTO_INCREMENT, `bbb` varchar(255) DEFAULT NULL, PRIMARY KEY (`aaa`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC; SET FOREIGN_KEY_CHECKS = 1; ``` > 1.对表进行代码生成,方便测试两个数据源 ![image_1c4mosmth1fp4dv81ai6nbll8u1g.png-92.7kB](https://img-blog.csdnimg.cn/20181228174637358) > 2.打开application.yml中的多数据源开关 ![image_1ci8k9e4l1kmtjmsh4a12rb10q39.png-87.8kB](https://img-blog.csdnimg.cn/20181228174637413) > 3.配置application.yml中的多数据源的连接信息 ![image_1ci8kbvun1m7b1t0g1g7r1k7u1f58m.png-92.2kB](https://img-blog.csdnimg.cn/20181228174637460) **另外注意,如果想开启多数据源,需要关闭kernel-core中mybatis-plus中的自动配置!!重要!!如下!!** ![image_1cpuhger9l1722v1afo8ab1vns1g.png-81.1kB](https://img-blog.csdnimg.cn/20181228174637499) > 4.编写测试多数据源的代码,注意观察`@DataSource注解`,这些代码都可以在`cn.stylefeng.guns.multi`包中找到 ``` package cn.stylefeng.guns.multi.service; /** * <p> * 服务类 * </p> * * @author fengshuonan * @since 2018-07-10 */ public interface TestService { /** * 测试多数据源的业务 * * @author stylefeng * @Date 2017/6/23 23:02 */ void testBiz(); /** * 测试多数据源的业务 * * @author stylefeng * @Date 2017/6/23 23:02 */ void testGuns(); } ``` ``` package cn.stylefeng.guns.multi.service.impl; import cn.stylefeng.guns.core.common.constant.DatasourceEnum; import cn.stylefeng.guns.multi.entity.Test; import cn.stylefeng.guns.multi.mapper.TestMapper; import cn.stylefeng.guns.multi.service.TestService; import cn.stylefeng.roses.core.mutidatasource.annotion.DataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /** * <p> * 服务实现类 * </p> * * @author fengshuonan * @since 2018-07-10 */ @Service public class TestServiceImpl implements TestService { @Autowired private TestMapper testMapper; @Override @DataSource(name = DatasourceEnum.DATA_SOURCE_BIZ) @Transactional public void testBiz() { Test test = new Test(); test.setBbb("bizTest"); testMapper.insert(test); } @Override @DataSource(name = DatasourceEnum.DATA_SOURCE_GUNS)` @Transactional public void testGuns() { Test test = new Test(); test.setBbb("gunsTest"); testMapper.insert(test); } } ``` ``` package cn.stylefeng.guns.multi.test; import cn.stylefeng.guns.base.BaseJunit; import cn.stylefeng.guns.multi.service.TestService; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; /** * 业务测试 * * @author fengshuonan * @date 2017-06-23 23:12 */ public class BizTest extends BaseJunit { @Autowired TestService testService; @Test public void test() { testService.testGuns(); testService.testBiz(); } } ``` > 5.执行`BizTest`这个测试类,可以看出,两条数据同时插入了不同的数据库中的两张表中 ![image_1ci8kfj001dr91gg01l721g781l5f13.png-18.7kB](https://img-blog.csdnimg.cn/20181228174637539) ![image_1ci8kg1fo18671fafp4q1k5e186u1g.png-26kB](https://img-blog.csdnimg.cn/20181228174637578) 多数据源的原理就是一个项目同时配置了两个`DataSource`,并把这两个`DataSource`放到`DynamicDataSource`绑定,使用AOP进行动态切换当前操作的数据源。 **若想深入了解多数据源的配置和原理可参考`MybatisPlusConfig类`和`MultiSourceExAop类`,也可参考视频教程第`7节 多数据源配置和使用`,内有详细的讲解**