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

个人开发的基于内存的请求监控系统。欢迎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);
    }
  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Spring Boot Quartz Starter是一个用于在Spring Boot应用程序中集成Quartz调度框架的库。Quartz是一个功能强大的开源任务调度框架,可以用于在Java应用程序中执行定时任务、计划任务等。 使用Spring Boot Quartz Starter,你可以很方便地将Quartz集成到你的Spring Boot应用程序中。它提供了一些自动配置和便利的功能,让你能够更快地开始使用Quartz。 要使用Spring Boot Quartz Starter,你需要在你的项目中添加相应的依赖。在Maven项目中,你可以在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> ``` 添加了依赖之后,你可以使用Spring Boot提供的注解和配置来定义和管理Quartz任务。通过使用`@EnableScheduling`注解,你可以启用Spring的任务调度功能。然后,你可以使用`@Scheduled`注解来定义定时任务的执行规则。 下面是一个简单的示例,演示了如何使用Spring Boot Quartz Starter创建一个定时任务: ```java import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component @EnableScheduling public class MyScheduler { @Scheduled(cron = "0 0/5 * * * ?") // 每5分钟执行一次 public void myTask() { // 定时任务的业务逻辑 System.out.println("定时任务执行了!"); } } ``` 在这个示例中,我们创建了一个名为`MyScheduler`的组件,并使用`@EnableScheduling`注解启用了Spring的任务调度功能。然后,我们使用`@Scheduled`注解定义了一个定时任务`myTask()`,它将每5分钟执行一次。 这只是一个简单的示例,你可以根据自己的需求来定义更复杂的定时任务。Spring Boot Quartz Starter提供了更多的功能和配置选项,可以帮助你更好地管理和调度任务。 希望能对你有所帮助!如果你有任何其他问题,请随时提问。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值