若依框架-功能详解_定时任务

目录

定时任务

案例

创建任务类

添加任务规则

调用方法

Cron表达式

执行策略

并发

启动任务

调试按钮


定时任务

传统的定时任务编码:如果需求改变,需要找到对应的源代码进行修改,然后重新编译、重新部署、重启服务器等才能生效,这种操作方式非常繁琐。

若依的定时任务功能:提供了友好的web界面,即不需要在源码中定制定时任务规则,通过web界面,就可以动态地管理指定类中的指定方法,在界面中定制时间规则,并且也能配置启动和关闭。

案例

每间隔五秒,控制台输出系统时间。

创建任务类

注意:任务类的位置,必须放在ruoyi-quartz模块下的task包里,并交给Spring IOC容器管理。

添加任务规则

调用方法

调用方法有两种

  • 类名的首字母小写作为对象名,在方法即可
  • 包名.类名.方法名

Cron表达式

cron表达式可以点击后面的生成表达式按钮,然后弹出下面这个框,进行设置即可

执行策略

业务场景:假如现在有一个业务需求,从8点开始,每半个小时执行一次,比如8点半执行一次,9点执行一次。服务器运行的时候,在8点之前突然宕机了,在9点15分时修复了。如果选择立即执行,它会执行8点到9点之间因为宕机而没有执行的任务,之后继续执行后面的任务(9点半、10点、10点半等等)。如果选择执行一次,它会执行因为宕机而没有执行的最后一个任务,在这里指的是9点执行的任务,在此之前的任务都不会执行,之后继续执行后面的任务9点半、10点、10点半等等)。如果选择放弃执行,则宕机期间未执行的任务,都不会执行,而是直接执行后面的任务9点半、10点、10点半等等)。

一般情况下,我们选择放弃执行即可,也就是之前没有执行的不管,直接执行最新的任务。

并发

假如现在有两个任务:A和B。这两个任务的时间规则刚好一样,如果允许并发执行,效率会提升,一般情况下,是允许并发的。但特殊的场景:关闭订单做退款,这两个任务是先关闭订单再做退款,即先执行A再执行B,如果允许并发执行,万一A失败了,B却执行了,即订单没关,钱却退了,这显然不合理,直接让客户白嫖了,所以针对这个特殊的场景,应该关闭并发执行。

启动任务

调试按钮

点击这个按钮,任务可以直接执行一次,一般用于测试,看看任务执行效果。

`SchedulingConfigurer` 是 Spring 框架中用于自定义任务调度配置的一个接口。通过实现这个接口,可以自定义计划任务的配置。如果你希望某个定时任务在项目启动时运行一次,并且之后再根据提供的 Cron 表达式进行周期性执行,你可以在配置定时任务时结合使用 `@Scheduled` 注解和 `SchedulingConfigurer` 接口。 以下是一个简单的实现方法: 首先,你需要实现 `SchedulingConfigurer` 接口,并重写 `configureTasks` 方法。在这个方法中,你可以先使用 `TaskScheduler` 调度器手动执行一次任务。然后再通过 `@Scheduled` 注解注册周期性的定时任务。 ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.SchedulingConfigurer; import org.springframework.scheduling.config.ScheduledTaskRegistrar; import org.springframework.scheduling.support.CronTrigger; @Configuration @EnableScheduling public class SchedulerConfig implements SchedulingConfigurer { @Autowired private MyScheduledTask myScheduledTask; @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { // 手动执行一次任务 myScheduledTask.execute(); // 使用CronTrigger来配置定时任务 taskRegistrar.addTriggerTask( () -> myScheduledTask.execute(), // 这里是任务的内容 triggerContext -> new CronTrigger("0 0/5 * * * ?").nextExecutionTime(triggerContext) // 每5分钟执行一次 ); } } public class MyScheduledTask { public void execute() { // 任务的具体逻辑 System.out.println("任务执行了,当前时间为:" + new Date()); } } ``` 在上面的代码中,`MyScheduledTask` 是一个简单的任务类,其中包含执行任务的 `execute` 方法。在 `SchedulerConfig` 类中,我们实现了 `SchedulingConfigurer`,并在 `configureTasks` 方法中手动调用了 `execute` 方法,以确保任务在应用启动时运行。然后我们通过 `TaskScheduler` 添加了一个周期性执行的任务,并使用了 `CronTrigger` 来定义执行间隔。 注意,实际项目中可能需要根据具体情况调整任务逻辑和触发器的配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值