Heim  >  Artikel  >  Java  >  So lösen Sie mehrere Timer-Konflikte in Spring Boot

So lösen Sie mehrere Timer-Konflikte in Spring Boot

王林
王林nach vorne
2023-05-17 08:07:051692Durchsuche

Nutzungsszenario

Unser Bestellservice hat im Allgemeinen eine zu bezahlende Bestellung, und diese zu bezahlende Bestellung ist zeitlich begrenzt. Beispielsweise ist die Bestellung von Alibaba fünf Tage und die Bestellung von Taobao ein Tag , Pinduoduo-Bestellungen dauern einen Tag, Meituan-Bestellungen dauern 15 Minuten...

Wie man im Fondssystem Fondsinformationen in mehreren Speicherpartitionen gleichzeitig aktualisiert ... Im Allgemeinen in der tatsächlichen Entwicklung , Timer müssen das Problem der gleichzeitigen Parallelität mehrerer Timer sowie das Problem von Konflikten zwischen Timern lösen ... Sie werden verstehen, nachdem Sie einen Blick darauf geworfen haben

Problemszenenwiedergabe#🎜 🎜#

#🎜 🎜#

Wir sehen deutlich, dass die Ausführungsergebnisse alle geplant sind-1So lösen Sie mehrere Timer-Konflikte in Spring Boot

Daraus kann geschlossen werden, dass der Springboot-Timer standardmäßig auf Single-Threaded eingestellt ist. Aber das Problem ist: Wenn die Ausführung eines Threads lange dauert, nachdem Threads um Ressourcen konkurrieren, was ist dann mit anderen Timern? kann nur in den Wartezustand wechseln, desto mehr Timer warten insgesamt, was leicht zu einer Lawine führen kann...

So lösen Sie mehrere Timer-Konflikte in Spring BootTatsächlich müssen Sie nur eine Konfigurationsklasse hinzufügen Fügen Sie Anmerkungen hinzu, um das Problem zu lösen 🎜#Konfigurationsklasse

Der spezifische Code lautet wie folgt:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Date;
@Component
public class SchedulerTaskController {
    private Logger logger= LoggerFactory.getLogger(SchedulerTaskController.class);
    private static final SimpleDateFormat dateFormat=new SimpleDateFormat("HH:mm:ss");
    private int count=0;
    @Scheduled(cron="*/6 * * * * ?")
    @Async("threadPoolTaskExecutor")
    public void process(){
        logger.info("英文:this is scheduler task runing "+(count++));
    }
    @Scheduled(fixedRate = 6000)
    @Async("threadPoolTaskExecutor")
    public void currentTime(){
        logger.info("中文:现在时间"+dateFormat.format(new Date()));
    }
}

Dann können wir klar sehen:

Das obige ist der detaillierte Inhalt vonSo lösen Sie mehrere Timer-Konflikte in Spring Boot. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen