ChatGPT解决这个技术问题 Extra ChatGPT

Spring cron expression for every day 1:01:am

I'm trying to have my code execute on a fixed schedule, based on a Spring cron expression. I would like the code to be executed every day at 1:01:am. I tried the following expression, but this didn't fire up for me. What's wrong with the syntax here?

@Scheduled(cron = "0 1 1 ? * *")
public void resetCache() {
    // ...
}
my cron expression 0 0 0 1 JAN MON was working till last year. Jan 1st onward stop working saying invalid cron expression. Though this was intended for very less frequency but we were able to run tc server. after jan 1 it didnt. When I changed to 0 0 7 ? * SUN it started working. I am curios to know why 0 0 0 1 JAN MON stopped working where as it was well in last year jan.
0 0 0 1 JAN MON may be wrong expression, well in this too it was working and tc server never complain

s
s.alem

Try with:

@Scheduled(cron = "0 1 1 * * ?")

Below you can find the example patterns from the spring forum:

* "0 0 * * * *" = the top of every hour of every day.
* "*/10 * * * * *" = every ten seconds.
* "0 0 8-10 * * *" = 8, 9 and 10 o'clock of every day.
* "0 0 8,10 * * *" = 8 and 10 o'clock of every day.
* "0 0/30 8-10 * * *" = 8:00, 8:30, 9:00, 9:30 and 10 o'clock every day.
* "0 0 9-17 * * MON-FRI" = on the hour nine-to-five weekdays
* "0 0 0 25 12 ?" = every Christmas Day at midnight

Cron expression is represented by six fields:

second, minute, hour, day of month, month, day(s) of week

(*) means match any

*/X means "every X"

? ("no specific value") - useful when you need to specify something in one of the two fields in which the character is allowed, but not the other. For example, if I want my trigger to fire on a particular day of the month (say, the 10th), but I don't care what day of the week that happens to be, I would put "10" in the day-of-month field and "?" in the day-of-week field.

PS: In order to make it work, remember to enable it in your application context: https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/scheduling.html#scheduling-annotation-support


The format is also documented in spring itself here - docs.spring.io/spring/docs/3.0.x/api/org/springframework/…
I guess spring cron is able to provide seconds provision also but normal unix cron is minute based... as in unix man pages minute is smallest unit of of time that can be configured.
what is the significance of the "?" character? Does it only apply to the "day(s) of week" field? Would it work/do something different if we replaced the '?' with '*' in the Christmas Day example?
@encrest take a look here: stackoverflow.com/questions/11499740/…
B
Bahadir Tasdemir

For my scheduler, I am using it to fire at 6 am every day and my cron notation is:

0 0 6 * * *

If you want 1:01:am then set it to

0 1 1 * * *

Complete code for the scheduler

@Scheduled(cron="0 1 1 * * *")
public void doScheduledWork() {
    //complete scheduled work
}

** VERY IMPORTANT

To be sure about the firing time correctness of your scheduler, you have to set zone value like this (I am in Istanbul):

@Scheduled(cron="0 1 1 * * *", zone="Europe/Istanbul")
public void doScheduledWork() {
    //complete scheduled work
}

You can find the complete time zone values from here.

Note: My Spring framework version is: 4.0.7.RELEASE


I don't know why your answer only have 12 even it's the only correct answer here!
Thank you very much @MoayadAbuJaber. The score is not important, if developers are able to fix their issues with my answers it's enough, cheers.
can i usee zone with xml config sheduler <task:scheduled ref="paypalCronJob" method="runTask" cron="0 0 6 * * * ?"/> ??
thumbs up for mentioning time zone
Thanks, @Forhad. If you are a developer and dealing with any of the issues which are related to the dates and times, you have to know the details of the timestamps, time zones, and conversions. Otherwise, your data will be nonsense
n
nbrooks

You can use annotate your method with @Scheduled(cron ="0 1 1 * * ?").

0 - is for seconds

1- 1 minute

1 - hour of the day.


M
Maleen Abewardana

Something missing from gipinani's answer

@Scheduled(cron = "0 1 1,13 * * ?", zone = "CST")

This will execute at 1.01 and 13.01. It can be used when you need to run the job without a pattern multiple times a day.

And the zone attribute is very useful, when you do deployments in remote servers. This was introduced with spring 4.


Note that the support of abbreviations(for time zone) is for JDK 1.1.x compatibility only and full names should be used - as per javadoc
I
Irlan Cidade

One thing i've noticed is: spring CronTrigger is not cron. You may end up with 7 parameters in a valid cron expression (wich you can validate on cronmaker.com) and then spring not accept it. Most of cases you just delete the last parameter and everything works fine.


"CronTrigger is not Quartz"
M
MACCXpace

Spring cron expression for every day 1:01:am

@Scheduled(cron = "0 1 1 ? * *")

for more information check this information:

https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm