题外话,最近一直有朋友加我WX,咨询sharding jdbc的事,说实话挺内疚的,只写了个文章,没把源码放出来,这次把源码补上。
正文
关于分表+多数据源,之前写了一篇,那篇文章介绍了:
- 如何集成sharding jdbc;
- 分表后,为什么要使用多数据源?
- sharding jdbc如何集成多数据源
不过,由于配置较多,容易出错,很多读者出现了各种奇怪的错误,然后开始怀疑这种方案是否行的通😂
所以,我又重新写了个完整的demo,从数据库到测试用例,均已写好,请放心使用。源码地址如下:
- Github:github.com/dudiao/shar…
- Gitee:gitee.com/songyinyin/…
下载后,使用idea打开如下:
如何运行项目?
1. 初始化数据库
运行sharding.sql
,会创建两个数据库:no_sharding
和order_sharding
├── no_shrding
│ ├── user 用户表
│── order_sharding
│ ├── user_order_0 用户订单表
│ ├── user_order_1 用户订单表
复制代码
2. 修改数据库信息
将项目中resources目录下的application.yml文件复制一份为application-dev.yml,在application-dev.yml中,将数据源信息修改为自己的。
3. 运行测试类
测试类中,激活了dev的配置文件,就是使用第2步添加的application-dev.yml
@Slf4j
@SpringBootTest(properties = "spring.profiles.active=dev")
class ShardingJdbcDemoApplicationTests {
@Autowired
private UserService userService;
@Autowired
private OrderService orderService;
@Test
void shardingJdbcTest() {
// 使用默认数据源(即不分表的数据源)
User dudiao = userService.getOne(Wrappers.<User>lambdaQuery().eq(User::getName, "读钓"));
// 使用@DS,切换到分表数据源
List<Order> orderList = orderService.getOrderByUser(dudiao.getId());
log.info("==> \n用户:{} \n订单:{}", dudiao, orderList);
Assert.isTrue(orderList.size() == 1, "订单数不正确!");
}
}
复制代码
运行测试类:
整个示例比较简单:用户的订单表进行了分表,先根据用户名称查询用户id,再去查询该用户的订单。麻雀虽小五脏俱全。
各位客官且慢,原创不易,点个赞再走呗。关注公众号 【读钓的YY】 可以白嫖😘,别下次一定了,就这次 🤣