wpf在page中如何切换page_如何在程序运行中动态切换数据源?架构师必读秘笈

77d5e32659a9e022c5c66e70bf811cb2.png

说起动态数据源,大家应该也不陌生。例如在读写分离系统中,则要对请求中的读写操作进行分离,让读和写落在不同的数据库上;例如在多租户系统中,则要根据请求来源租户的不同,让其落在不同租户的数据库上;例如在分库应用中,也要根据不同的规则让请求落在不同的数据库上。于是,我们的应用要根据请求的不同,操作不同的数据库,这时就需要动态数据源的帮助。

DynamicDataSource就是一个出色的动态数据源,他能让你在程序运行过程中动态增删和切换数据源。而且,它十分易用。使用它在一个请求中查询多个数据源变得无比简单。

0fd31ae986aed8c6d371c8c9e00271b0.png

1 特点

DynamicDataSource具有以下特点:

  • 小巧:只实现最基本的数据源增删、切换功能,不涉及相关业务。
  • 易用:只需要简单的配置和几个方法的调用便可以完成所有功能。
  • 兼容:增加数据源时,数据源信息可以来自配置文件、前端界面输入、数据库查询等各种方式。
  • 无侵入:切换数据源操作可以由切面触发、逻辑触发、注解触发等,均可以供开发者自由实现。

DynamicDataSource中常用的方法有:

  • boolean addDataSource(DataSourceInfo dataSourceInfo, Boolean overwrite):增加一个数据源,overwrite用来决定如果已经存在同名数据源时是否要覆盖
  • boolean addAndSwitchDataSource(DataSourceInfo dataSourceInfo, Boolean overwrite):增加一个数据源并切换到该数据源,overwrite用来决定如果已经存在同名数据源时是否要覆盖
  • boolean switchDataSource(String dataSourceName):切换到指定名称的数据源
  • boolean delDataSource(String dataSourceName):删除一个数据源
  • void switchDefaultDataSource():切换到默认的数据源
  • DataSource getDefaultDataSource():获取默认数据源

以上方法都是多线程安全的。你可以在切面、操作逻辑、注解中调用以上方法,完成数据源的动态增删与切换。

2 快速上手

demo文件夹下提供一个示例项目,供大家快速上手。以该demo项目为例,我们介绍DynamicDataSource的使用。

2.1 引入依赖包

在POM文件中引入DynamicDataSource的jar包。

3e534d550e2642b1ecc37303e75fcc9e.png

2.2 基本配置

在application.properties文件中写入默认的数据源信息,下面为示例。可按照自己的数据源进行修改。

d2e45e69fdbdeccfd6cea79644dab5da.png

禁止Spring对DataSourceAutoConfiguration类的加载,否则该类会去加载固定的数据源。

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) 

增加对DynamicDataSource所在包的Bean的扫描。

@ComponentScan(basePackages = {"com.github.yeecode.dynamicdatasource","{other_package_root}"}) 

2.3 开始使用

至此,使用DynamicDataSource所需的全部配置就完成了。使用下面方式注入DynamicDataSource后便可以调用其中的数据源操作方法。

@Autowired 
private DynamicDataSource dynamicDataSource; 

我们可以按照demosqlDDL.md文件所述建立两个数据源,然后测试DynamicDataSource的工作情况。

启动DynamicDataSourceDemo项目得到如下界面。

3463c45d0e7509f1463e7b925028ed65.png

例如我们可以在一个接口内实现数据源的切换,从而在请求到达/接口时,先后查询了两个数据源中的数据,如代码所示。

b8d26ac4239922820e0677129e345f92.png

可以得到下图所示的结果。下图打印的两行语句分别来自两个数据源。

3af47a1930b1d1670ea4bb87de779b9e.png

数据源新增、删除、切换操作可以在切面中、业务逻辑中、注解中等各处进行触发。DynamicDataSource不做任何限制,交由开发人员按照实际需要实现。

3 总结

怎么样,DynamicDataSource的使用是不是非常简单。通过Maven仓库直接下载依赖,并且还有Demo项目指导,瞬间上手。

从此,动态数据源的切换So Easy!

实属架构师、程序员秘笈,收藏起来,日后用。其具体接口可能在日后升级中变动,请以最新版本的README文档为准。项目地址如下:

https://github.com/yeecode/DynamicDataSource​github.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值