应用程序启动后和午夜后运行的Spring调度程序

Naw*_*awa 9 cron spring scheduling

如何描述在应用程序启动后和00:00之后运行的Spring调度程序?

nic*_*ild 27

我会用两个独立的结构来做这件事.

对于应用程序启动时,使用后@PostConstuct,并在每天的午夜使用@Scheduledcron设置值.两者都适用于一种方法.

public class MyClass {
    @PostConstruct
    public void onStartup() {
        doWork();
    }

    @Scheduled(cron="0 0 0 * * ?")
    public void onSchedule() {
        doWork();
    }

    public void doWork() {
        // your work required on startup and at midnight
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 要使调度工作,请添加`@EnableScheduling`注释 (3认同)
  • 避免后期构建!这是在对象被构造之后立即发生的。可能还有一些依赖项还不存在。等待 ApplicationReadyEvent,如 Philippe Gibert 提案中所述。 (3认同)

Mai*_*aik 9

nicholas.hauschild 和 Philippe Gibert 的解决方案的组合。原因: @PostConstruct 可能不是您想要的,因为您可能需要其他尚未启动的服务。

public class MyClass {

    @EventListener(ApplicationReadyEvent.class)
    @Scheduled(cron="0 0 0 * * ?")
    public void onSchedule() {
        doWork();
    }

    public void doWork() {
        // your work required on startup and at midnight
    } 
  
}
Run Code Online (Sandbox Code Playgroud)

考虑在doWork()内部捕获异常。


小智 6

关于这个主题的一点,你可以使用@EventListener注解。

这是一个例子:

@Component
public class MyScheduler {

    @EventListener(ApplicationReadyEvent.class)
    public void onSchedule() {
        doWork();
    }

    public void doWork() {
        // your work required on startup
    }
}
Run Code Online (Sandbox Code Playgroud)