There are some behavior changes in Spring Boot 2.3.0. This issue #21325 commit introduced new Web Server lifecycle logic - WebServerStartStopLifecycle. And now there is this order during an applicaton startup:
- WebServerStartStopLifecycle.start -> webServer.start
- publishEvent(new ContextRefreshedEvent(this));
In Spring Boot 2.2.0 there was another logic (ServletWebServerApplicationContext.java):
protected void finishRefresh() {
    super.finishRefresh();
    WebServer webServer = startWebServer();
    if (webServer != null) {
        publishEvent(new ServletWebServerInitializedEvent(webServer, this));
    }
}
And order was like this:
- publishEvent(new ContextRefreshedEvent(this));
- webServer.start
We run some logic after the Spring context has been initialized but before web server started. With Spring Boot 2.3.0 web server processes requests before this logic is done.
If it is an expected change of events order, it should be mentioned in migration guide.