Une introduction rapide à SpringBootServletInitializer

Une introduction rapide à SpringBootServletInitializer

1. Vue d'ensemble

Dans ce didacticiel, nous allons passer par une introduction rapide desSpringBootServletInitializer.

Il s'agit d'une extension deWebApplicationInitializer queruns a SpringApplication from a traditional WAR archive déployé sur un conteneur Web. Cette classe lie les beansServlet,Filter etServletContextInitializer du contexte d'application au serveur.

L'extension de la classeSpringBootServletInitializer nous permet également de configurer notre application lorsqu'elle est exécutée par le conteneur de servlet, en remplaçant la méthodeconfigure().

2. SpringBootServletInitializer

Pour être plus pratique, nous allons montrer un exemple de classe principale qui étend la classeInitializer.

Notre classe@SpringBootApplication appeléeWarInitializerApplication étend lesSpringBootServletInitializer et remplace la méthodeconfigure(). Cette méthode utiliseSpringApplicationBuilder pour simplement enregistrer notre classe en tant que classe de configuration de l'application:

@SpringBootApplication
public class WarInitializerApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(
      SpringApplicationBuilder builder) {
        return builder.sources(WarInitializerApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication sa = new SpringApplication(
          WarInitializerApplication.class);
        sa.run(args);
    }

    @RestController
    public static class WarInitializerController {

        @GetMapping("/")
        public String handler() {
           // ...
        }
    }
}

Désormais, si nous conditionnons notre application en tant que WAR, nous serons en mesure de la déployer sur n'importe quel conteneur Web de manière traditionnelle, ce qui exécutera également la logique que nous avons ajoutée dans la méthodeconfigure().

Si nous voulons l'empaqueter en tant que fichier JAR, nous devrons ajouter la même logique à la méthodemain() afin que le conteneur intégré puisse également le récupérer.

3. Conclusion

Dans cet article, nous avons présenté lesSpringBootServletInitializer et montré comment nous pouvons l'utiliser pour exécuter des applications Spring Boot à partir d'une archive WAR classique.

Le code source complet de l'exemple est disponibleover on GitHub. Il s'agit d'un projet basé sur Maven, il peut donc être importé et utilisé tel quel.