Empfohlene Vorgehensweise

Diese Tipps helfen Ihnen dabei, die Hintergrundverarbeitung reibungslos und effizient zu gestalten.

Machen Sie Jobargumente klein und einfach

Methodenaufrufe (d. H. Ein Job) werden während des Erstellungsprozesses des Hintergrundjobs serialisiert. Argumente werden mithilfe der JobMapper-Klasse in Json-Zeichenfolgen konvertiert. Wenn Sie komplexe Entitäten und / oder große Objekte haben; Bei Arrays ist es besser, sie in einer Datenbank abzulegen und dann nur ihre Identität an den Hintergrundjob zu übergeben.

Also, anstatt dies zu tun:

public void backgroundMethod(Entity entity) {}

Überlegen Sie Folgendes:

public void backgroundMethod(long entityId) {}

Machen Sie Ihre Hintergrundmethoden Wiedereintrittbar

Wiedereintrittbar bedeutet, dass eine Methode während ihrer Ausführung unterbrochen und dann wieder sicher aufgerufen werden kann. Die Unterbrechung kann durch viele verschiedene Dinge verursacht werden (d. H. Ausnahmen, Herunterfahren des Servers), und JobRunr versucht mehrmals, die Verarbeitung zu wiederholen, bis der Job erfolgreich war.

Sie können viele Probleme haben, wenn Sie Ihre Jobs nicht darauf vorbereiten, wieder einzutreten. Wenn Sie beispielsweise einen Hintergrundjob zum Senden von E-Mails verwenden und ein Fehler bei Ihrem SMTP-Dienst auftritt, können Sie mit mehreren E-Mails enden, die an den Adressaten gesendet werden.

Anstatt dies zu tun:

public void sendWelcomeEmail(Long userId) {
    User user = userRepository.getUserById(userId);
    emailService.Send(user.getEmailAddress(), "Hallo!");
}

Überlegen Sie Folgendes:

public void sendWelcomeEmail(Long userId) {
    User user = userRepository.getUserById (userId);

    if (user.IsWelcomeEmailNotSent()) {
        emailService.Send(user.getEmailAddress(), "Hallo!");
        user.setWelcomeEmailSent(true);
        userRepository.save(user);
    }
}