Κοινή χρήση τεχνολογίας

SpringBoot καθημερινά: Η εφαρμογή @Scheduled εκτελείται μία φορά όταν ξεκινά η υπηρεσία

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina


Μιλώντας για προγραμματισμένες εργασίες, θα πρέπει να σκεφτούμε τα @Scheduled, Quartz και XXL-JOB Ωστόσο, ορισμένες μεμονωμένες υπηρεσίες ή μικρά έργα μπορεί να χρησιμοποιούν απευθείας το @Scheduled για την υλοποίηση ασύγχρονων εργασιών για ευκολία και ταχύτητα. Επομένως, οι θεματικές απαιτήσεις αυτού του άρθρου επεκτείνονται.

Όταν το @Scheduled χρησιμοποιείται σε ένα έργο, πώς μπορεί να εκτελεστεί εκ των προτέρων η καθορισμένη ασύγχρονη εργασία κατά την εκκίνηση του έργου;

1. Λεπτομερής επεξήγηση του @Scheduled

Ο σχολιασμός @Scheduled υποστηρίζει πολλαπλές παραμέτρους για τον ευέλικτο έλεγχο του χρόνου εκτέλεσης της εργασίας.

  • cron: Έκφραση Cron, η οποία μπορεί να ελέγξει με ακρίβεια δευτερόλεπτα, λεπτά, ώρες, ημέρες, μήνες, εβδομάδες κ.λπ.
    Εισαγάγετε την περιγραφή της εικόνας εδώ
  • ζώνη: Λήψη μιας ζώνης ώρας, όπως η Ασία/Σαγκάη, η ζώνη ώρας που χρησιμοποιούμε συνήθως Αφήνουμε αυτό το πεδίο κενό.
  • fixedDelay: Πόσο καιρό μετά τον τελευταίο χρόνο ολοκλήρωσης της εκτέλεσης θα εκτελεστεί ξανά. Όπως @Scheduled(fixedDelay = 5000)
  • fixedDelayString: έχει την ίδια σημασία με το fixedDelay, αλλά με τη μορφή συμβολοσειράς. Η μόνη διαφορά είναι ότι υποστηρίζει placeholders, όπως @Scheduled(fixedDelayString = "5000")
  • fixedRate: Πόσο καιρό μετά την τελευταία έναρξη του χρόνου εκτέλεσης, όπως @Scheduled(fixedRate = 5000)
  • fixedRateString: έχει την ίδια σημασία με το fixedRate, αλλά με τη μορφή συμβολοσειράς. Η μόνη διαφορά είναι ότι υποστηρίζονται τα placeholders.
  • αρχικήΚαθυστέρηση: Πόση ώρα να καθυστερήσει η εκτέλεση για πρώτη φορά, για παράδειγμα, η πρώτη καθυστέρηση είναι 1 δευτερόλεπτο πριν από την εκτέλεση )
  • initialDelayString: έχει την ίδια σημασία με το originalDelayString, αλλά με τη μορφή συμβολοσειράς. Η μόνη διαφορά είναι ότι υποστηρίζονται τα placeholders.

2. Εφαρμογή λογικής

1. Δημιουργήστε μια μέθοδο λογικής προγραμματισμένης εργασίας

/**
 * @Author 码至终章
 * @Version 1.0
 */
@Component
public class ScheduledTest {

    @Scheduled(cron = "* 1 * * * ?")
    public void task1() throws Exception{
        System.out.println("task1 执行: " + Thread.currentThread() + "-" + DateTime.now());
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2. Δημιουργήστε μια νέα κλάση εκτέλεσης εκκίνησης

Αυτή η κλάση καλεί κυρίως την καθορισμένη μέθοδο εργασίας με μη αυτόματο τρόπο κατά την εκκίνηση

/**
 * @Author 码至终章
 * @Version 1.0
 */
@Component
public class StartupTasks {

    private final ScheduledTest scheduledTasks;

    public StartupTasks(ScheduledTest scheduledTasks) {
        this.scheduledTasks = scheduledTasks;
    }

    @PostConstruct
    public void startUp() {
        try {
            System.out.println("服务启动执行任务");
            scheduledTasks.task1();
        }catch (Exception e){
			e.printStackTrace();
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

Σημείωση: Θυμηθείτε να προσθέσετε το @EnableScheduling στην κλάση εκκίνησης, ώστε να εκτελεστεί η προγραμματισμένη εργασία Φυσικά, αυτό δεν επηρεάζει τη λογική δοκιμή αυτού του άρθρου.

3. Αποτελέσματα δοκιμών

Αφού ξεκινήσει η υπηρεσία, προβάλετε τις πληροφορίες εκτύπωσης
Εισαγάγετε την περιγραφή της εικόνας εδώ