Я использую dropwizard версии 0.7.1. Он настроен на использование «случайного» (эфемерного?) порта (server.applicationConnectors.port=0). Я хочу узнать, какой порт действительно используется после запуска, но я не могу найти никакой информации, как это сделать.
Как программно получить порт приложения в Dropwizard
Ответы (2)
Вы можете получить обратный вызов serverStarted
от прослушивателя жизненного цикла, чтобы понять это.
@Override
public void run(ExampleConfiguration configuration, Environment environment) throws Exception {
environment.lifecycle().addServerLifecycleListener(new ServerLifecycleListener() {
@Override
public void serverStarted(Server server) {
for (Connector connector : server.getConnectors()) {
if (connector instanceof ServerConnector) {
ServerConnector serverConnector = (ServerConnector) connector;
System.out.println(serverConnector.getName() + " " + serverConnector.getLocalPort());
// Do something useful with serverConnector.getLocalPort()
}
}
}
});
}
person
condit
schedule
28.08.2014
Начиная с Dropwizard 1.1.0, ServerLifecycleListener предоставляет удобный метод
getLocalPort()
, см. эту фиксацию а>.
- person Philip Potter; 20.11.2020
Я считаю, что этот подход хорошо сработал для меня как с простой конфигурацией сервера, так и с конфигурацией сервера по умолчанию в Dropwizard.
public void run(ExampleConfiguration configuration, Environment environment) throws Exception {
Stream<ConnectorFactory> connectors = configuration.getServerFactory() instanceof DefaultServerFactory
? ((DefaultServerFactory)configuration.getServerFactory()).getApplicationConnectors().stream()
: Stream.of((SimpleServerFactory)configuration.getServerFactory()).map(SimpleServerFactory::getConnector);
int port = connectors.filter(connector -> connector.getClass().isAssignableFrom(HttpConnectorFactory.class))
.map(connector -> (HttpConnectorFactory) connector)
.mapToInt(HttpConnectorFactory::getPort)
.findFirst()
.orElseThrow(IllegalStateException::new);
}
person
Michael Barnwell
schedule
29.01.2018
Работает :), а также я не понял решения @condit для получения локального порта. Не нашел никакого метода для вызова getLocalPort().
- person siddhusingh; 12.03.2018