Cron定时 java入门级理解

目的: 能写出一个正确的Cron

cron可以是6位或7位 按顺序是 秒 分 时 日 月 周 (年),以空格隔开
java的 @Scheduled 只支持6位, quartz可支持7位

秒,分,时,不赘述
: 即第4位, 指当月的第几天,不能为0
: 即第5位,指当年的第几个月,不能为0
: 即第6位,这里不是指第几周, 而是一周的第几天,其实也算日,只是为了区分. (不确定,有说0就是周日,但是我在quartz测了0会报错)
这里就出现了一个矛盾点: 日和周, 假设都写 * ,会报错.
(个人理解: 我希望这一天是一个月里的第几天,或一周里的第几天,只能二选一,要是都选了,比较拗口, 所以其中一个位置必须要用?来代替 ,表示我不关注这个栏位 )
总结: 第4位或第6位必须出现一个?号
如果想写 0 * * * * *这种, , 即0 * * ? * * 或 0 * * * * ?

例子:

 0 * * * * ? 每分钟0秒的时候执行一次
 * 0 * * * ? 每小时0分钟的时候执行60=每小时0分钟的时候每秒一次
 , 比如10:00:00的时候每秒一次一直执行到10:00:59
 , 然后下一次等11:00:00的时候再执行
 * * 0 * * ? 每天0点执行一整个小时,这个小时内每秒一次
 * * * 1 * ? 每月一号执行一整天
 * * * * 1 ? 每年一月份执行整个月
 * * * ? * 1 每周一执行一整天 (周的用法可能有误,此处是参考网上所说,望自己测试,比如周四实际是5之类的)

总结易错点:很多时候想要的是例如每天8点一次, 0 0 8 * * ?
实际写成 * * 8 * * ? 问题就大了

以上仅限初步写出一个能用的cron, 如用法有误,望指出,谢谢.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当你需要在Java应用程序中执行定时任务时,可以使用cron表达式来定义任务的执行时间。cron表达式是一种时间表达式,它由6个字段组成,分别表示秒、分钟、小时、日期、月份和星期几。以下是cron表达式的格式: ``` 秒 分钟 小时 日期 月份 星期几 ``` 每个字段可以是一个具体的值,也可以是一个范围或者通配符。下面是一些常用的cron表达式示例: - `0 0 12 * * ?`:每天中午12点执行任务 - `0 15 10 ? * MON-FRI`:周一至周五的10点15分执行任务 - `0 0/5 14,18 * * ?`:每天下午2点到6点,每隔5分钟执行任务 - `0 0 6,18 * * ?`:每天早上6点和晚上6点执行任务 在Java中,你可以使用Quartz框架来实现定时任务。Quartz提供了一个Scheduler类,可以用来调度和执行任务。你可以通过创建一个JobDetail对象来定义任务的具体逻辑,然后将该对象与一个Trigger对象关联起来,Trigger对象使用cron表达式来定义任务的执行时间。 以下是一个使用Quartz框架实现定时任务的示例代码: ```java import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; public class CronJobExample { public static void main(String[] args) throws SchedulerException { // 创建一个JobDetail对象,定义任务的具体逻辑 JobDetail job = JobBuilder.newJob(MyJob.class) .withIdentity("myJob", "group1") .build(); // 创建一个Trigger对象,定义任务的执行时间 Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("myTrigger", "group1") .withSchedule(CronScheduleBuilder.cronSchedule("0 0 12 * * ?")) .build(); // 创建一个Scheduler对象,用来调度和执行任务 Scheduler scheduler = new StdSchedulerFactory().getScheduler(); scheduler.start(); scheduler.scheduleJob(job, trigger); } } public class MyJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { // 任务的具体逻辑 System.out.println("定时任务执行了!"); } } ``` 以上代码中,`MyJob`类实现了`Job`接口,其中的`execute`方法定义了任务的具体逻辑。在`CronJobExample`类中,创建了一个`JobDetail`对象和一个`Trigger`对象,并将它们关联起来。然后创建一个`Scheduler`对象,并调用`scheduleJob`方法来将任务和触发器添加到调度器中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值