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
}
}
@Component
public class MyScheduler {
@EventListener(ApplicationReadyEvent.class)
public void onSchedule() {
doWork();
}
public void doWork() {
// your work required on startup
}
}
@Component
public class MyScheduler {
@Scheduled(cron="*/10 * * * * *")
public void onSchedule() {
doWork();
}
public void doWork() {
// your work required on startup and at midnight
}
}
好的,据我所知,你想运行你的时间表作业,一旦应用程序启动,并在每个午夜。 Spring Scheduler提供了initialDelay,但您必须将其与fixedDelay一起使用。 以下是我答案:
// it runs after 30 seconds of startup, you will be dead before it runs again.
@Scheduled(initialDelay = 1000 * 30, fixedDelay=Long.MAX_VALUE)
public void runAtStartup(){
doWork();
}
// runs every midgnight (12.00 AM)
@Scheduled(cron="0 0 0 * * ?")
public void onSchedule() {
doWork();
}
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
}
}
8条答案
按热度按时间f2uvfpb91#
我会用两个独立的结构来做这个。
对于应用程序启动后的情况,使用
@PostConstuct
,对于每天午夜的情况,使用@Scheduled
并设置cron
值。iih3973s2#
关于这个主题,您可以使用@EventListener注解。
下面是一个例子:
lf5gs5x23#
首先,您应该为应用程序配置添加
@EnableScheduling
注解。第二步是为你的调度器添加
@Component
或@Service注解。如果你正在使用Scheduled
注解,它会在初始化后自动运行,你可以在注解中使用initialDelay
参数来更改它。以下是完整示例
c0vxltue4#
我们有多种方法来执行它,@nicholas.hauschild建议的方法是正确的,比任何其他方法都容易,但是对于
@PostConstruct
,我们必须小心不要使用依赖bean的方法,那个bean可能还没有初始化,导致NullPointerException
。因此,我们可以实现
CommandLineRunner
或ApplicationRunner
并实现run方法,这样,在初始化所有bean并启动应用程序后,就会自动调用run方法。qzwqbdag5#
好的,据我所知,你想运行你的时间表作业,一旦应用程序启动,并在每个午夜。
Spring Scheduler提供了
initialDelay
,但您必须将其与fixedDelay
一起使用。以下是我答案:
mwkjh3gx6#
尼古拉斯·豪斯柴尔德和菲利普·吉伯特的解决方案的组合。理由:@PostConstruct可能不是您想要的,因为您可能需要其他尚未启动的服务。
6qfn3psc7#
了解更多信息请点击此链接https://www.baeldung.com/cron-expressions
对于要在午夜完成的特定任务,有一个预定义的注解可以提供帮助,请尝试
@midnight
。yxyvkwin8#