搭建通用的SSM框架 (三) 项目使用多数据源,并且实现数据源的动态切换

本文介绍了如何在SSM项目中搭建多数据源,并实现动态切换。通过自定义数据源类继承AbstractRoutingDataSource,结合AOP和注解,实现了根据业务方法注解自动切换数据源的功能。同时,还集成了HttpClient用于远程API调用。
摘要由CSDN通过智能技术生成

源码为分支multi-datasource

一、实现目标: 

          1) 可以灵活的在项目中添加新的数据源

          2) 可以通过注解的方式动态切换数据源

          3) 集成HttpClient实现api的远程调用

二、实现思路:

              单数据源的时候,只要把初始化的数据源注入到对应的事务管理器TransactionManager和SqlSessionFactoryBean

中去即可;

              多数剧源的时候,只需要定义一个自定义的数据源类,把其代替单数据源注入对应的事务管理器TransactionManager

和SqlSessionFactoryBean中去即可;

               自定义的数据源,需要包含项目所有的的数据源信息,而且最好设置一个默认的数据源

三、实现方法:

               根据实现思路,根据现有框架所支持的,自定义的数据源类只需继承AbstractRoutingDataSource类,重写

determineCurrentLookupKey方法即可

四、需要解决的问题:

             1) 如何在项目启动的时候根据配置文件的信息,初始化所有的数据源,并把所有的数据源注入自定义的数据源类

              2) 如何在执行业务方法的时候,自动切换数据源


问题1的解决方案: 利用下面注解实现根据属性文件初始化数据源信息

@EnableConfigurationProperties
@Configuration
@ConfigurationProperties(prefix = "master.datasource.druid")
@PropertySource(value = "classpath:masterdb.properties")

                               利用下面的注解,把数据源信息注入到自定义的数据源中去

@Autowired

1.1) 定义一个基类

package com.roger.core.config;

import com.alibaba.druid.pool.DruidDataSource;
import lombok.Data;

import javax.sql.DataSource;
import java.sql.SQLException;

@Data
public class DBConfig {
    protected String driverClassName;
    protected String url;
    protected String userName;
    protected String password;
    protected int initialSize;
    protected int minIdle;
    protected int maxActive;
    protected long maxWait;
    protected boolean poolPreparedStatements;
    protected String validationQuery;
    protected boolean testOnBorrow;
    protected boolean testOnReturn;
    protected boolean testWhileIdle;
    protected long timeBetweenEvictionRunsMillis;
    protected long minEvictableIdleTimeMillis;
    protected String filters;

    public DataSource initDruidDataSource() throws SQLException {
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setDriverClass
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值