关于多数据源:MOor掰泡馍式教学实现多数据源

一、引言本文次要介绍一种优雅、平安、易用,反对事务管理的Spring Boot整合多数据源的形式,本文中不针对多数据源是什么、为什么用、什么时候用做介绍,小伙伴可依据本身状况酌情驳回 舒适提醒:基于以下常识有肯定利用与实际后,能更好地了解本篇文章 Lambda、ThreadLocal、栈、队列、自定义注解IoC、AOP、Druid、Maven、Spring Boot因为本文次要解说代码的具体实现,代码与正文较多,若感到浏览体验不佳,可配合开源代码,应用代码编辑器进行浏览多数据源Gitee地址对应我的项目模块为hei-dynamic-datasource 二、大抵思路通过配置类与yml配置文件先拆卸好默认数据源与多数据源再通过自定义注解与AOP,找到指标类或办法,并指定其应用的数据源Key值最初通过继承AbstractRoutingDataSource类,返回经AOP解决后的数据源Key值,从第一步拆卸好的数据源中找到对应配置并利用三、测试用例在类或办法上加上@DataSource("value")就能够指定不同数据源 @Service// 办法上的注解比类上注解优先级更高@DataSource("slave2")public class DynamicDataSourceTestService { @Autowired private SysUserDao sysUserDao; @Transactional public void updateUser(Long id){ SysUserEntity user = new SysUserEntity(); user.setUserId(id); user.setMobile("13500000002"); sysUserDao.updateById(user); } @Transactional @DataSource("slave1") public void updateUserBySlave1(Long id){ SysUserEntity user = new SysUserEntity(); user.setUserId(id); user.setMobile("13500000001"); sysUserDao.updateById(user); } @DataSource("slave2") @Transactional public void updateUserBySlave2(Long id){ SysUserEntity user = new SysUserEntity(); user.setUserId(id); user.setMobile("13500000003"); sysUserDao.updateById(user); // 测试事务 int i = 1/0; }}@RunWith(SpringRunner.class)@SpringBootTestpublic class DynamicDataSourceTest { @Autowired private DynamicDataSourceTestService dynamicDataSourceTestService; @Test public void test(){ Long id = 1L; dynamicDataSourceTestService.updateUser(id); dynamicDataSourceTestService.updateUserBySlave1(id); dynamicDataSourceTestService.updateUserBySlave2(id); }}四、我的项目构造 ...

April 6, 2022 · 5 min · jiezi