Maison > Java > javaDidacticiel > le corps du texte

Burlando ou @Async du printemps

王林
Libérer: 2024-09-12 10:21:00
original
1237 Les gens l'ont consulté

Burlando o @Async do Spring

Il est courant lors de la création d'applications à l'aide de Spring, d'utiliser l'annotation @EnableAsync pour activer les exécutions asynchrones et avec l'aide de @Async les méthodes les rendent facilement asynchrones.

@Async a essentiellement deux règles d'utilisation :

  • la méthode annotée doit être publique
  • l'invocateur de méthode ne peut pas appartenir à la même classe

Dans l'exemple ci-dessous, il n'y aura aucun problème de compilation, mais la méthode (bien qu'annotée avec @Async) ne s'exécutera pas comme souhaité.

@Slf4j
@Service
@RequiredArgsConstructor
public class HelloService {

    public String get() {
        log.info("Chegou!");
        print();

        return "Ola!";
    }

    @Async
    @SneakyThrows
    public void print() {
        Thread.sleep(Duration.ofSeconds(5));

        log.info("Burlado!");
    }
}
Copier après la connexion

Et il est très courant que nous souhaitions que, parce que c'est la responsabilité de la classe, le bloc de code qui doit être exécuté de manière asynchrone y reste. Comment résoudre ?

Simple !

Il nous suffit de créer une autre classe qui aide, par exemple :

@Service
public class AsyncService {

    @Async
    public void run(final Runnable runnable) {
        runnable.run();
    }

    @Async
    public <O> O run(final Supplier<O> supplier) {
        return supplier.get();
    }
}
Copier après la connexion

Nous faisons une injection de dépendances de ce bean là où une exécution asynchrone est souhaitable et en plus de cela, nous pouvons rendre la méthode privée.

@Slf4j
@Service
@RequiredArgsConstructor
public class HelloService {

    private final AsyncService asyncService;

    public String get() {
        log.info("Chegou!");

        asyncService.run(this::print);

        return "Ola!";
    }

    @SneakyThrows
    private void print() {
        Thread.sleep(Duration.ofSeconds(5));

        log.info("Burlado!");
    }
}
Copier après la connexion

Ce petit exemple démontre l'application de plusieurs concepts et ressources : Inversion de Contrôle, Injection de Dépendances, SOLID, Design Pattern, Interfaces Fonctionnelles.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal