es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cuándo está lista la aplicación de Spring Boot para recibir solicitudes HTTP?

Tengo:

  1. múltiples ApplicationRunners
  2. y múltiples trabajos @Scheduled que se ejecutan inmediatamente después de que la aplicación comienza y periódicamente después de eso.

Quiero escribir un mensaje en el registro cuando la aplicación esté lista para manejar solicitudes HTTP; de esta manera, puedo verificar que se hayan ejecutado todos los trabajos necesarios antes de que la aplicación pueda aceptar solicitudes HTTP.

  1. P1: ¿Cómo / dónde escribir este mensaje en el registro?
  2. P2: ¿Cómo ejecutar código antes de aceptar solicitudes HTTP?

Nota: mi aplicación extiende SpringBootServletInitializer.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Solución

    P1: ¿Cómo/Dónde escribir este mensaje de registro?

    Para escribir un mensaje de registro cuando la aplicación esté lista para manejar solicitudes HTTP, podemos implementar un bean de tipo ApplicationListener<applicationreadyevent> y sobrescribir el método onApplicationEvent. Este método se llama una vez que el contexto de la aplicación se ha cargado y está listo para aceptar solicitudes HTTP.

    El código para esto puede verse así:

    @Component
    public class ApplicationStartup implements ApplicationListener<applicationreadyevent> {
    
        private static final Logger logger = LoggerFactory.getLogger(ApplicationStartup.class);
    
        @Override
        public void onApplicationEvent(final ApplicationReadyEvent event) {
            logger.info("La aplicación está lista para servir solicitudes HTTP.");
        }
    }
    

    P2: ¿Cómo ejecutar código antes de aceptar solicitudes HTTP?

    Para ejecutar código antes de aceptar solicitudes HTTP, podemos implementar un bean de tipo ServletWebServerFactory y sobrescribir el método getWebServer. Dentro de este método, podemos agregar cualquier código de configuración necesario antes de que se inicie el servidor web.

    El código para esto puede verse así:

    @Component
    public class CustomServletContainer implements ServletWebServerFactory {
    
        @Override
        public WebServer getWebServer(ServletContextInitializer... initializers) {
            // Agregue cualquier código de configuración aquí
    
            // Crea el servidor web Tomcat embebido
            TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
    
            // Devuelve el servidor Tomcat
            return factory.getWebServer(initializers);
        }
    
        // Otros métodos aquí
    }
    

    Nota: si la aplicación extiende SpringBootServletInitializer, podemos sobrescribir el método configure y agregar cualquier código de configuración necesario antes de que se inicie la aplicación.

Comments are closed.