个人开发的基于内存的请求监控系统。欢迎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);
}