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-1
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...Tatsä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())); } }
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!