多线程进行同步数据

本文介绍了在开发中如何利用生产者消费者模式进行数据同步,特别是从第三方系统的中间库获取数据并处理。一个生产者线程负责实时查询未同步数据,多个消费者线程进行数据同步,并记录同步状态。通过监听`ContextRefreshedEvent`事件来启动线程,避免在未初始化所有bean的`ContextStartedEvent`中启动。注意线程中不能直接注入Spring管理的bean,可以通过实现`ApplicationContextAware`手动获取bean。
摘要由CSDN通过智能技术生成

开发中会有场景需要对接第三方系统.第三方系统往往会提供一个中间库,然后我们系统读取中间库的数据,然后经过一系列的逻辑,把数据存到自己系统中. 在这里分享一种通过生产者,消费者模式进行数据同步,接近实时

主要思路: 一个生产者线程, 实时去中间库查询没有同步的数据.多个消费者,消费生产者生产的数据

                 1.一个生产者线程, 实时去中间库查询没有同步的数据

                 2.使用消费者对生产者生产的数据进行同步

                 3.记录下处理完成/处理失败的同步记录

 

/**
 * 同步中间库生产者.从中间库中查询数据
 */
public class Producer implements Runnable {

    private OwnerMiddleQueryService queryService;//查询中间库Service,可考虑抽成接口
    private LinkedBlockingQueue<Runnable> consumers;//消费者队列
    private ThreadPoolExecutor executor;//线程池


    public Producer(OwnerMiddleQueryService queryService, LinkedBlockingQueue<Runnable>
            consumers, ThreadPoolExecutor executor) {
        this.queryService = queryService;
        this.consumers = consumers;
        this.executor = executor;
    }

    @Override
    public void run() {
        while (true){
            List<OwnerMiddle> datas =  queryS
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值