Ответ 1
Самое простое, что нужно сделать, это отправить сообщение, как только SpringApplication.run()
вернется. Этот метод не вернется, пока Tomcat (или любой другой поддерживаемый встроенный контейнер) не будет полностью запущен и не прослушивает настроенные порты. Однако, хотя это и просто, но это не очень аккуратный подход, так как он сочетает в себе проблемы вашего основного класса конфигурации и некоторую логику времени выполнения вашего приложения.
Вместо этого вы можете использовать SpringApplicationRunListener
. finished()
не будет вызываться до тех пор, пока Tomcat не будет полностью запущен и не прослушивает настроенный порт.
Создайте файл с именем src/main/resources/META-INF/spring.factories
списком прослушивателя запуска. Например:
org.springframework.boot.SpringApplicationRunListener=com.example.MyRunListener
Создайте прослушиватель запуска с помощью необходимого конструктора и реализуйте SpringApplicationRunListener
. Например:
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringApplicationRunListener;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;
public class MyRunListener implements SpringApplicationRunListener {
public MyRunListener(SpringApplication application, String[] args) { }
@Override
public void starting() { }
@Override
public void environmentPrepared(ConfigurableEnvironment environment) { }
@Override
public void contextPrepared(ConfigurableApplicationContext context) { }
@Override
public void contextLoaded(ConfigurableApplicationContext context) { }
@Override
public void started(ConfigurableApplicationContext context) {
// Send message; Tomcat is running and listening on the configured port(s)
}
@Override
public void running(ConfigurableApplicationContext context) { }
@Override
public void failed(ConfigurableApplicationContext context, Throwable exception) { }