Spring-boot使用Quartz实现多线程调度任务

本文介绍了如何在Spring-boot项目中使用Quartz实现多线程任务调度,详细阐述了如何通过监听器观察Service动态并结合Quartz执行周期性任务,以及解决在Job中注入Spring管理bean的问题。
摘要由CSDN通过智能技术生成

个人开发的基于内存的请求监控系统。欢迎star和一同参与。https://github.com/standup-jb/tortoise

 

背景:项目的背景还原一下,项目的App需要去调用第三方的接口获取数据。我们要创建很多个任务(Task),每个Task都要去获取数据,但是每个Task的执行周期和频率不一样。所以使用多线程来解决。为每一个Task启动一个线程。然后循环不停的去获取数据。刚开始的时候打算自己写Thread然后对Thread进行管理。后面发现有一个框架Quartz可以很Spring-boot进行集成。非常好用,但是使用的过程中还是遇到了很多的问题。自己网上查资料找结果才将问题最后都解决了。在这个工程中深感查询资料的不容易,很多人写的博客表述不清楚。所以自己写一个希望可以帮助到更多的人。

 

因为Quartz的用法网上还是很多的很容易找到。难的是如何和Spring-boot结合起来是比较麻烦的。所以我可能重点会放在这个上面。

具体实现步骤:

1、首先在项目的Gradle里面添加Quartz 依赖(Maven的话就自己找一个依赖的源)

 

compile('org.quartz-scheduler:quartz:2.3.0')  

一、实现观察者模式。实现一个Listener去观察Service的动向,减少耦合关系。

1、先让被观察者继承Java.util.Observable对象。表示可以拥有给观察者发送消息的能力

 

@Service
public class OutlierServiceImpl extends Observable {
    
    @Override
    public void addTask(OutlierDetection outlierDetection){
      
        MessageObject messageObject =new MessageObject();
        messageObject.setOperate(OutlierOperate.ADD);
        messageObject.setOutlierDetection(outlierDetection);
        setChanged();
        notifyObservers(messageObject);
    }
    @Override
    public void removeTask(String assetId,String outlierName){

       
        setChanged();
        notifyObservers(messageObject);
    }

    @Override
    public void updateTask(OutlierDetection outlierDetection){
        MessageObject messageObject=new MessageObject();
        messageObject.setOperate(OutlierOperate.UPDATE);
        messageObject.setOutlierDetection(outlierDetection);
        setChanged();
        notifyObservers(messageObject);
    }
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值