当前位置: 首页 > news >正文

《SpringBoot篇》19.SpringBoot整合Quart

陈老老老板
说明:工作了,学习一些新的技术栈和工作中遇到的问题,边学习边总结,各位一起加油。需要注意的地方都标红了,还有资源的分享. 一起加油。
本文是介绍Memcached与SpringBoot整合

Quartz

​ Quartz技术是一个比较成熟的定时任务框架,怎么说呢?有点繁琐,用过的都知道,配置略微复杂。springboot对其进行整合后,简化了一系列的配置,将很多配置采用默认设置,这样开发阶段就简化了很多。再学习springboot整合Quartz前先普及几个Quartz的概念。

  • 工作(Job):用于定义具体执行的工作
  • 工作明细(JobDetail):用于描述定时工作相关的信息
  • 触发器(Trigger):描述了工作明细与调度器的对应关系
  • 调度器(Scheduler):用于描述触发工作的执行规则,通常使用cron表达式定义规则

​ 简单说就是你定时干什么事情,这就是工作,工作不可能就是一个简单的方法,还要设置一些明细信息。工作啥时候执行,设置一个调度器,可以简单理解成设置一个工作执行的时间。工作和调度都是独立定义的,它们两个怎么配合到一起呢?用触发器。完了,就这么多。下面开始springboot整合Quartz。

步骤①:导入springboot整合Quartz的starter

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

步骤②:定义任务Bean,按照Quartz的开发规范制作,继承QuartzJobBean

public class MyQuartz extends QuartzJobBean {
    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        System.out.println("quartz task run...");
    }
}

步骤③:创建Quartz配置类,定义工作明细(JobDetail)与触发器的(Trigger)bean

@Configuration
public class QuartzConfig {
    @Bean
    public JobDetail printJobDetail(){
        //绑定具体的工作
        return JobBuilder.newJob(MyQuartz.class).storeDurably().build();
    }
    @Bean
    public Trigger printJobTrigger(){
        ScheduleBuilder schedBuilder = CronScheduleBuilder.cronSchedule("0/5 * * * * ?");
        //绑定对应的工作明细
        return TriggerBuilder.newTrigger().forJob(printJobDetail()).withSchedule(schedBuilder).build();
    }
}

​ 工作明细中要设置对应的具体工作,使用newJob()操作传入对应的工作任务类型即可。

​ 触发器需要绑定任务,使用forJob()操作传入绑定的工作明细对象。此处可以为工作明细设置名称然后使用名称绑定,也可以直接调用对应方法绑定。触发器中最核心的规则是执行时间,此处使用调度器定义执行时间,执行时间描述方式使用的是cron表达式。有关cron表达式的规则,各位小伙伴可以去参看相关课程学习,略微复杂,而且格式不能乱设置,不是写个格式就能用的,写不好就会出现冲突问题。

Task

​ spring根据定时任务的特征,将定时任务的开发简化到了极致。怎么说呢?要做定时任务总要告诉容器有这功能吧,然后定时执行什么任务直接告诉对应的bean什么时间执行就行了,就这么简单,一起来看怎么做

步骤①:开启定时任务功能,在引导类上开启定时任务功能的开关,使用注解@EnableScheduling

@SpringBootApplication
//开启定时任务功能
@EnableScheduling
public class Springboot22TaskApplication {
    public static void main(String[] args) {
        SpringApplication.run(Springboot22TaskApplication.class, args);
    }
}

步骤②:定义Bean,在对应要定时执行的操作上方,使用注解@Scheduled定义执行的时间,执行时间的描述方式还是cron表达式

@Component
public class MyBean {
    @Scheduled(cron = "0/1 * * * * ?")
    public void print(){
        System.out.println(Thread.currentThread().getName()+" :spring task run...");
    }
}

​ 完事,这就完成了定时任务的配置。总体感觉其实什么东西都没少,只不过没有将所有的信息都抽取成bean,而是直接使用注解绑定定时执行任务的事情而已。

​ 如何想对定时任务进行相关配置,可以通过配置文件进行

spring:
  task:
   	scheduling:
      pool:
       	size: 1							# 任务调度线程池大小 默认 1
      thread-name-prefix: ssm_      	# 调度线程名称前缀 默认 scheduling-      
        shutdown:
          await-termination: false		# 线程池关闭时等待所有任务完成
          await-termination-period: 10s	# 调度线程关闭前最大等待时间,确保最后一定关闭

总结:定时任务是工作中必须掌握的内容。希望对您有帮助,感谢阅读

结束语:裸体一旦成为艺术,便是最圣洁的。道德一旦沦为虚伪,便是最下流的。
勇敢去做你认为正确的事,不要被世俗的流言蜚语所困扰。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 一把搞懂线程中stop、sleep、supend、yield、wait、notify
  • 初阶数据结构 栈
  • Redis实战 - 08 Redis 的 BitMaps 位图命令
  • 改进YOLOv5系列:首发结合最新CSPNeXt主干结构(适用YOLOv7),高性能,低延时的单阶段目标检测器主干,通过COCO数据集验证高效涨点
  • 基于导频的信道估计实现
  • 小满Vue3第四十五章(Vue3 Web Components)
  • Linux 内核页表管理
  • 基于MAX-SUM算法的大规模信息系统的协调问题matlab仿真
  • 【Spring+SpringMVC+Mybatis】Spring+SpringMVC+Mybatis实现前端到后台完整项目
  • c#,c++,qt中多线程访问UI控件线程的问题汇总
  • 详解预处理指令(#define)
  • JS第五课(JS的分支语句)
  • 【项目实战】自主实现HTTP(七)——错误处理、线程池引入、项目扩展及结项
  • 时序预测 | MATLAB实现贝叶斯优化CNN-LSTM时间序列预测(股票价格预测)
  • 【程序环境与预处理】
  • 时间复杂度分析经典问题——最大子序列和
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • android图片蒙层
  • Java到底能干嘛?
  • Linux链接文件
  • maya建模与骨骼动画快速实现人工鱼
  • SQLServer之创建数据库快照
  • uni-app项目数字滚动
  • Vim 折腾记
  • windows-nginx-https-本地配置
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 为什么要用IPython/Jupyter?
  • 一个完整Java Web项目背后的密码
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 阿里云服务器购买完整流程
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​VRRP 虚拟路由冗余协议(华为)
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #、%和$符号在OGNL表达式中经常出现
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #知识分享#笔记#学习方法
  • (c语言)strcpy函数用法
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (十)Flink Table API 和 SQL 基本概念
  • (一)SpringBoot3---尚硅谷总结
  • (转)Scala的“=”符号简介
  • (转)原始图像数据和PDF中的图像数据
  • *2 echo、printf、mkdir命令的应用
  • 、写入Shellcode到注册表上线
  • .gitattributes 文件
  • .net 获取url的方法
  • .NET/C# 使用反射注册事件
  • .net访问oracle数据库性能问题
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • /dev/sda2 is mounted; will not make a filesystem here!
  • @AliasFor注解