安排 Spring 工作,使其不应该在第 2 和第 4 个星期六 运行
Schedule Spring job so it should not run on 2nd and 4th saturday
我想 运行 我 spring 在工作日和星期六安排的工作。(星期六不应该是每月的第 2 天和第 4 天)。有什么方法可以使用 spring 表达式来实现。
public class PayoutJob {
@Scheduled(cron="0 0 11 1 * MON-FRI")
public void payout(){
System.out.println("Started cron job");
// some business logic
}
}
上述工作 运行 工作日上午 11 点 IST。有什么方法可以计算第 2 个和第 4 个星期六的逻辑并将其放入 spring 表达式中以避免 运行 在那些日子里完成工作。
我的建议是,保持简短:
public class PayoutJob {
@Scheduled(cron="0 0 11 1 * MON-FRI")
public void payoutMonFri(){
doJob();
}
@Scheduled(cron="0 0 11 1 * SAT")
public void payoutSat(){
if(!is2ndOr4thSaturday()){
doJob();
}
}
void doJob(){
System.out.println("Started cron job");
// some business logic
}
boolean is2ndOr4thSaturday(){
Calendar c = Calendar.getInstance();
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
if(dayOfWeek == Calendar.SATURDAY){
int today = c.get(Calendar.DAY_OF_MONTH);
c.set(Calendar.DAY_OF_MONTH, 1); // reset
int saturdayNr = 0;
while(c.get(Calendar.DAY_OF_MONTH) <= today){
if(c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY){
++saturdayNr;
}
c.add(Calendar.DAY_OF_MONTH, 1);
}
return saturdayNr == 2 || saturdayNr == 4;
}
return false;
}
}
我已根据我的要求更正了 while 循环条件。
我想 运行 我 spring 在工作日和星期六安排的工作。(星期六不应该是每月的第 2 天和第 4 天)。有什么方法可以使用 spring 表达式来实现。
public class PayoutJob {
@Scheduled(cron="0 0 11 1 * MON-FRI")
public void payout(){
System.out.println("Started cron job");
// some business logic
}
}
上述工作 运行 工作日上午 11 点 IST。有什么方法可以计算第 2 个和第 4 个星期六的逻辑并将其放入 spring 表达式中以避免 运行 在那些日子里完成工作。
我的建议是,保持简短:
public class PayoutJob {
@Scheduled(cron="0 0 11 1 * MON-FRI")
public void payoutMonFri(){
doJob();
}
@Scheduled(cron="0 0 11 1 * SAT")
public void payoutSat(){
if(!is2ndOr4thSaturday()){
doJob();
}
}
void doJob(){
System.out.println("Started cron job");
// some business logic
}
boolean is2ndOr4thSaturday(){
Calendar c = Calendar.getInstance();
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
if(dayOfWeek == Calendar.SATURDAY){
int today = c.get(Calendar.DAY_OF_MONTH);
c.set(Calendar.DAY_OF_MONTH, 1); // reset
int saturdayNr = 0;
while(c.get(Calendar.DAY_OF_MONTH) <= today){
if(c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY){
++saturdayNr;
}
c.add(Calendar.DAY_OF_MONTH, 1);
}
return saturdayNr == 2 || saturdayNr == 4;
}
return false;
}
}
我已根据我的要求更正了 while 循环条件。