java 如何在微服务系统中使用定时器创建/更新将来运行的任务

de90aj5v  于 2023-02-18  发布在  Java
关注(0)|答案(1)|浏览(96)

[问题]我的服务有多个示例,并且在微服务系统中运行。在服务中,我使用Timer示例在将来运行任务

public class CustomizedTimerTask extends TimerTask {

    private String message;
    private String sender;
    private String reciver;
    
    @Override
    public void run() {
        // todo somthing
    }

}

@Service
public MyTimerService {

    public void initAfterStartOn() {
        // get all task that have due date greater than now
        // for_each and call newTask() function
    }

    public void newTask() {
        
        Date startedAt = new Date(new Date().getTime() + ((long)5 * 60 * 60);
        
        CustomizedTimerTask timerTask = new CustomizedTimerTask();
        timerTask.setSender("sender");
        timerTask.setRevicer("receiver");
        timerTask.setMessage("Hi, nice to meet you");
        timer.schedule(new CustomizedTimerTask(), new Date(startedAt));
        
        // save CustomizedTimerTask to Database
    }
}

如果我只运行一个示例,一切都会好的。但是如果我有多个示例,其中一个关闭并稍后运行。它将运行initAfterStartOn(),这会导致任务重复。有人能给予我建议吗?
目前,我还没有找到任何解决办法。

6kkfgxo0

6kkfgxo01#

您可以尝试使用@Scheduled注解

@Scheduled (cron = "0 0/10 * * * *", zone = "IST")
@SchedulerLock(name="createPromotionJob",lockAtLeastFor = "PTSM",lockAtMostFor="PTOM") 
public void scheduledCreatePromotion() {

相关问题