springboot-双数据源配置

本文介绍了在SpringBoot中实现双数据源配置的详细步骤,以解决高并发场景下数据库读写压力问题。通过创建数据源枚举、数据源切换切面、动态数据源类等,实现了不同业务数据源的自动切换,确保了应用的稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先说下大背景--用户数据交互数据业务数据都在同一个数据库上,当有时效的活动比如榜单结束的时候大量用户开始刷排名,导致数据库读写同步压力过大,数据延迟从而产生错误的排名;
当时对大数据表已经做了分表处理而且加了缓存,千人榜乃至万人榜的榜单结束是伴随着大量的计算,数据插入,消息推送;mysql IO瞬间就飙到60M;所以在不改变线上系统稳定运行的前提下把用户交互数据移出去。
springboot双数据库的例子网上有很多,但是不同的场景就有不同的处理方式。
直接上干货:
双数据源配置主要以下几个类:
/**
 * Created by lixb on 2018/1/27.
 * 多数据源数据库类型
 *  app基本库
 *  社交库
 *  消息库 等
 */
public enum DataSourceType {
    db_app, //默认app
    ab_msg //社交库
}
/**
 * Created by lixb on 2018/1/26.
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({
        ElementType.METHOD
})
public @interface DS {
    DataSourceType value() default DataSourceType.db_app;
}
/**
 * Created by lixb on 2018/1/26.
 */
public class DatabaseContextHolder {


    private static final ThreadLocal<DataSourceType> contextHolder = new ThreadLocal<>();
    // 设置数据源名
    public static void setDB(DataSourceType dbType) {
        contextHolder.set(dbType);
    }

    // 获取数据源名
    public static DataSourceType getDB() {
        return (contextHolder.get());
    }

    // 清除数据源名
    public static void clearDB() {
        contextHolder.remove();
    }
}
/**
 * Created by lixb on 2018/1/26.
 */
public class DynamicDataSource extends AbstractRoutingDataSource {
    @Override
    protected Object determineCurrentLookupKey() {
        return DatabaseContextHolder.getDB();
    }
}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值