背景
因线上业务平台数据量巨大单库操作性能已经非常缓慢,所以需要对web应用进行模块拆分与数据库分库分表的改造.
配置
SSM 多数据源配置,以及使用 org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource 动态切换数据源
SSM项目首先还是从web.xml配置文件开始, 其中重点在applicationContext.xml它是多数据源以及动态数据源的配置文件
1 | <context-param> |
applicationContext.xml
1 | <bean id="resource" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> |
DynamicDataSource 自定义的动态数据源切换类
1 | public class DynamicDataSource extends AbstractRoutingDataSource { |
DynamicDataSourceContextHolder 数据源变量类
1 | public class DynamicDataSourceContextHolder { |
有了以上的配置,则可以在controller进行测试动态数据源是否配置成功.
1 |
|
selectOne方法sql以及表结构如下
1
2
3
4 create table temp_001(name varchar2(20));
select name from temp_001
-- 只要保证每个数据库都有这张表,每个表中的数据值不同,就可以请求...test/select?datasource=datasource01
-- 根据不同的数据源名称查看效果至此SSM下配置多数据源以及使用Spring的AbstractRoutingDataSource 动态切换数据源Demo结束.
知识点: 在何处切换数据源? 需要根据业务具体场景去判断到底是在controller还是service层去切换数据源
例如: 需要根据web前端查询的参数来匹配对应的数据源,则可以考虑在过滤器层面找到查询参数对应的数据源然后
DynamicDataSourceContextHolder.setDataSource(datasource);
切换数据源即可.
再比如: 根据模块拆分的库, 则可以考虑使用aop 对某个模块进行特征匹配, 统一该模块对应的数据源.