Springboot定时任务
程序员文章站
2022-04-12 22:10:01
定时任务使用@Scheduled@Scheduled 注解也支持 cron 表达式,使用 cron 表达式,可以非常丰富的描述定时任务的时间Quartz添加依赖org.springframework.boot spring-boot-starter-quartz ...
定时任务
-
使用@Scheduled
@Scheduled 注解也支持 cron 表达式,使用 cron 表达式,可以非常丰富的描述定时任务的时间
-
Quartz
-
添加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency>
-
开启定时任务注解
@SpringBootApplication @EnableScheduling public class QuartzdemoApplication { public static void main(String[] args) { SpringApplication.run(QuartzdemoApplication.class, args); } }
Quartz 在使用过程中,有两个关键概念,一个是JobDetail(要做的事情),另一个是触发器(什么时候做),要定义 JobDetail,需要先定义 Job,Job 的定义有两种方式:
-
第一种方式,直接定义一个Bean:
@Component public class MyJob1 { public void sayHello() { System.out.println("MyJob1>>>"+new Date()); } }
注意:这种方式无法传参。
-
第二种定义方式,则是继承 QuartzJobBean 并实现默认的方法:
public class MyJob2 extends QuartzJobBean { HelloService helloService; public HelloService getHelloService() { return helloService; } public void setHelloService(HelloService helloService) { this.helloService = helloService; } @Override protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException { helloService.sayHello(); } } public class HelloService { public void sayHello() { System.out.println("hello service >>>"+new Date()); } }
Job 有了之后,接下来创建类,配置 JobDetail 和 Trigger 触发器,如下:
@Configuration public class QuartzConfig { @Bean MethodInvokingJobDetailFactoryBean methodInvokingJobDetailFactoryBean() { MethodInvokingJobDetailFactoryBean bean = new MethodInvokingJobDetailFactoryBean(); bean.setTargetBeanName("myJob1"); bean.setTargetMethod("sayHello"); return bean; } @Bean JobDetailFactoryBean jobDetailFactoryBean() { JobDetailFactoryBean bean = new JobDetailFactoryBean(); bean.setJobClass(MyJob2.class); JobDataMap map = new JobDataMap(); map.put("helloService", helloService()); bean.setJobDataMap(map); return bean; } @Bean SimpleTriggerFactoryBean simpleTriggerFactoryBean() { SimpleTriggerFactoryBean bean = new SimpleTriggerFactoryBean(); bean.setStartTime(new Date()); bean.setRepeatCount(5); bean.setJobDetail(methodInvokingJobDetailFactoryBean().getObject()); bean.setRepeatInterval(3000); return bean; } @Bean CronTriggerFactoryBean cronTrigger() { CronTriggerFactoryBean bean = new CronTriggerFactoryBean(); bean.setCronExpression("0/10 * * * * ?"); bean.setJobDetail(jobDetailFactoryBean().getObject()); return bean; } @Bean SchedulerFactoryBean schedulerFactoryBean() { SchedulerFactoryBean bean = new SchedulerFactoryBean(); bean.setTriggers(cronTrigger().getObject(), simpleTriggerFactoryBean().getObject()); return bean; } @Bean HelloService helloService() { return new HelloService(); } }
- JobDetail 的配置有两种方式:MethodInvokingJobDetailFactoryBean 和 JobDetailFactoryBean 。
- 使用 MethodInvokingJobDetailFactoryBean 可以配置目标 Bean 的名字和目标方法的名字,这种方式不支持传参。
- 使用 JobDetailFactoryBean 可以配置 JobDetail ,任务类继承自 QuartzJobBean ,这种方式支持传参,将参数封装在 JobDataMap 中进行传递。
- Trigger 是指触发器,Quartz 中定义了多个触发器,这里向大家展示其中两种的用法,SimpleTrigger 和 CronTrigger 。
- SimpleTrigger 有点类似于前面说的 @Scheduled 的基本用法。
- CronTrigger 则有点类似于 @Scheduled 中 cron 表达式的用法。
-
本文地址:https://blog.csdn.net/Actor2/article/details/107691171
上一篇: 自动生成代码工具--APT
下一篇: Java学习____循环嵌套和方法的使用
推荐阅读
-
php计划任务的兑现
-
linux计划任务运行php文件的方法分享_PHP教程
-
SpringBoot validator参数验证restful自定义错误码响应方式
-
springboot 项目启动后无日志输出直接结束的解决
-
SpringBoot+Spring Security无法实现跨域的解决方案
-
springboot aspect通过@annotation进行拦截的实例代码详解
-
PHP程序自动运行,windows计划任务
-
springboot整合shiro多验证登录功能的实现(账号密码登录和使用手机验证码登录)
-
springboot 实现记录业务日志和异常业务日志的操作
-
mac系统任务栏中搜索快捷键不见了怎么办?