Sont multiples demandes traitées par fil simple au printemps de démarrage jusqu'à ce seuil de demandes est atteint?

auto stoppeuse :

Dans mon projet Spring Boot 2.1.6 (basé sur Tomcat) J'ai un contrôleur de repos. J'ai ajouté un constructeur par défaut pour ce qui imprime quelque chose. Je pensais que dans les serveurs basés sur Tomcat chaque demande est traitée dans le thread séparé. Donc, je m'y attendais chaque demande de déclencher un nouvel objet de contrôleur et à la suite de nouveaux impression à partir du constructeur. Cependant, j'ai fait un test d'envoyer 30 demandes au contrôleur de repos et je vois seulement que l'impression a été faite une fois. Donc, pour autant que je comprends les poignées de contrôleur de repos toutes ces demandes dans un thread.

Ma question est de savoir si les demandes sont traitées en effet multiples dans un seul thread ou peut-être il est certain seuil de demande sur lequel un autre thread sera ouvert? J'utilise par défaut la configuration Spring Boot peut-être ceci est contrôlé quelque part dans la configuration?

Voici le code pour mon contrôleur:

@RestController
public class TrackingEventController {

    public TrackingEventController() {
        System.out.println("from TrackingEventController");
    }

    @RequestMapping(method=GET, path=trackingEventPath)
    public ResponseEntity<Object> handleTrackingEvent(
            @RequestParam(name = Routes.event) String event,
            @RequestParam(name = Routes.pubId) String pubId,
            @RequestParam(name = Routes.advId) String advId) {

        return new ResponseEntity<>(null, new HttpHeaders(), HttpStatus.OK);
    }
}
JB Nizet:

Vous mélanger deux concepts orthogonaux:

  1. un fil
  2. une instance de contrôleur

Un seul fil pourrait créer et / ou utiliser une ou plusieurs instances de contrôleur.

Plusieurs threads peuvent également créer et / ou utiliser une ou plusieurs instances de contrôleur.

Les deux ne sont pas liés.

Et comment cela fonctionne réellement est

  • Les grains de printemps sont singletons par défaut, Spring crée une seule instance de votre contrôleur
  • Un conteneur de servlet utilise un pool de threads.
  • Chaque fois qu'une requête arrive, un fil est choisi parmi la piscine, et ce poignées de fil de la demande. Si la demande est mis en correspondance avec votre contrôleur, la méthode appropriée de l'instance du contrôleur unique est exécuté par ce fil.

Si vous voulez savoir quel thread traite la demande actuelle, ajoutez à votre méthode de commande:

System.out.println(Thread.currentThread().getName());

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=230288&siteId=1
conseillé
Classement