Heim > Java > javaLernprogramm > So ändern Sie Scheduled in SpringBoot dynamisch

So ändern Sie Scheduled in SpringBoot dynamisch

WBOY
Freigeben: 2023-05-15 20:58:15
nach vorne
1861 Leute haben es durchsucht

SpringBoot ändert die geplante Ausführungszeit dynamisch

Szenario:

Konfigurierbare geplante Ausführungszeit, normal. Die geplante Ausführungszeit ist beim Start des Projekts festgelegt. Es gibt keine Möglichkeit, die geplante Ausführungszeit basierend auf dem Aufruf des Hintergrundcodes automatisch zu aktualisieren

Zum Beispiel:

System Start Lesezeit Cron: 0 0 3 * *?, Sie können das Cron-Zeitformat dynamisch konfigurieren, indem Sie die Hintergrundmethode ausführen, die ursprüngliche Ausführungsaufgabe löschen und die neu festgelegte geplante Aufgabenzeit ausführen

1. Ändern Sie die geplante Aufgabe dynamisch entsprechend zu den ThreadPoolTaskScheduler- und ScheduledFuture-Klassen (Die ThreadPoolTaskScheduler-Klasse kann @Autowired nicht verwenden und Mitgliedsvariablen nicht direkt definieren)

private ThreadPoolTaskScheduler threadPoolTaskScheduler;
private ScheduledFuture<?> future;
Nach dem Login kopieren

2. Ändern Sie die Logik der Scheduled-Hintergrundmethode dynamisch (Objekt ist die Timing-Logik, die die Runnable-Implementierungsklasse ausführen muss, und Fügen Sie es in die Run-Thread-Methode ein.)

threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.initialize();
if(future!=null){
    future.cancel(true);
}
future=threadPoolTaskScheduler.schedule(object,new CronTrigger("需要Cron时间格式字符串") );
Nach dem Login kopieren

Die obige Logik ----------------------- Sie können die dynamische geplante Konfiguration wie folgt implementieren Logik--------------- -------- Konfigurieren Sie das Projekt so, dass es automatisch mit dem Lesen von DB Cron beginnt, legen Sie das Timing fest

1, @Order und implementieren Sie das Umschreiben der CommandLineRunner-Klasse Methodenlauf

@Override
    public void run(String... args) throws Exception {
        logger.info("系统启动 默认设置对账任务 时间");
        //获取目前DB 设置的对账时间
        GetBillTimeResp time = systemConfigService.getTime();
        //获取Cron时间格式字符串
        String timeCron = billTimeCronFormat(time.getBillTime());
        logger.info("时间为:"+timeCron);
        //Scheduler 设置每天执行。。。
        threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
        threadPoolTaskScheduler.initialize();
        future=threadPoolTaskScheduler.schedule(object,new CronTrigger("DB Cron时间格式字符串")); }
Nach dem Login kopieren
SpringBoot-Projekt @Geplant zum Lesen dynamischer Parameter

1, basierend auf @ Geplante konfigurierbare Entwicklung

application.propertites: 
read.timer.parmas=0 0/1 * * * *
Nach dem Login kopieren

Timing-Klasse:

@Component
public class ScheduledService {
Logger logger= LoggerFactory.getLogger(ScheduledService.class);
    @Scheduled(cron = "${read.timer.parmas}")
    public void readConfigTable(){
        logger.info("*****.read.timer.parmas");
    }
}
Nach dem Login kopieren

Startklasse:

@SpringBootApplication
@EnableScheduling  //必须
public class DataApplication {
  public static void main(String[] args) {
        SpringApplication.run(DataApplication.class,args);
    }
}
Nach dem Login kopieren

2. Codebasierte Implementierung

(1) Kern Code

@Component
@EnableScheduling
public class TestScheduledParams implements SchedulingConfigurer{
    Logger logger= LoggerFactory.getLogger(TestScheduledParams.class);
 
    public static  String DEFAULT_CORN="0/3 * * * * *";
    //##动态传参要给默认值。
    public static String corn=DEFAULT_CORN;
    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {     
        taskRegistrar.addTriggerTask(new Runnable() {
            @Override
            public void run() {
               // logger.info("定时任务逻辑");
            }
        }, new Trigger() {
            @Override
            public Date nextExecutionTime(TriggerContext triggerContext) {
                //任务触发,可修改任务的执行周期
                CronTrigger cronTrigger = new CronTrigger(corn);
                Date date = cronTrigger.nextExecutionTime(triggerContext);
                return date;
            }
        });
    }
}
Nach dem Login kopieren

(2) Andere Klassen oder Methoden dynamische Parameterzuweisung

TestScheduledParams.corn="0/20 * * * * *"
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSo ändern Sie Scheduled in SpringBoot dynamisch. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage