2013-11-17 5 views
35

У меня есть служба службы REST на основе Dropwizard, работающая на портах 8080 по умолчанию (служба) и 8081 (admin), мне нужно изменить порты по умолчанию на то, что менее широко используется, я не могу найти любую информацию, чтобы сделать это, может кто-нибудь, пожалуйста, назовите меня сделать это?Изменить порты по умолчанию Dropwizard

ответ

68

Вы можете обновить порты в вашем конфигурационном файле YAML:

http: 
    port: 9000 
    adminPort: 9001 

См http://www.dropwizard.io/0.9.2/docs/manual/configuration.html#http для получения дополнительной информации.

EDIT

Если вы мигрировали в Dropwizard 0.7.x, 0.8.x, 0.9.x вы можете использовать следующее:

server: 
    applicationConnectors: 
    - type: http 
    port: 9000 
    adminConnectors: 
    - type: http 
    port: 9001 
+0

Спасибо, но только установки этих портов в .yml файла в моем проекте не меняются портов по умолчанию, он по-прежнему работает на 8080 Есть ли файл yaml по умолчанию, отличный от того, который у меня есть для моего сервиса, который мне нужно использовать для ввода этих новых значений? – user1965449

+0

Странный - он работает для меня. Как вы указываете свой файл конфигурации? Должно быть в командной строке Java при запуске службы ... – condit

+0

У меня есть .yml-файл непосредственно под папкой проекта в eclipse и запускаю службу, используя живую банку java -jar myservice.jar server, I Не указывайте его с помощью командной строки, есть ли здесь два файла конфигурации? один для службы и один для конфигурации? Для начала я следую руководству. Этот файл конфигурации совпадает с файлом .yml, который в руководстве упоминается для примера Hello World? – user1965449

5

Я никогда раньше не работал с dropwizard, создавая простые сервисы с использованием трикотажа. Я решил посмотреть руководство пользователя и сразу нашел описание настроек.

Dropwizard configuration manual

Вы можете изменить параметры конфигурации, передавая специальные системные свойства Java при запуске службы. Переопределения должны начинаться с префикса dw., А затем путь к переопределенному значению конфигурации. Например, чтобы переопределить HTTP порт для использования, вы можете начать свой сервис, как это:

java -Ddw.http.port=9090 server my-config.json 

Подходит ли для вас?

28

из командной строки, вы можете установить их таким образом, в Dropwizard 0,6:

java -Ddw.http.port=9090 -Ddw.http.adminPort=9091 -jar yourapp.jar server yourconfig.yml 

Если вы используете Dropwizard 0.7, система свойств устанавливаются следующим образом:

java -Ddw.server.applicationConnectors[0].port=9090 -Ddw.server.adminConnectors[0].port=9091 -jar yourapp.jar server yourconfig.yml 

Похоже, что если вы настраиваете порты через системные свойства, вам также необходимо установить их в yml (в любом случае, системное свойство имеет приоритет). По крайней мере, это происходит со мной в Dropwizard 0.7. Пример конфигурации порта YAML:

server: 
    applicationConnectors: 
    - type: http 
    port: 8090 
    adminConnectors: 
    - type: http 
    port: 8091 

Если вы не ставите эти порты в YAML, Dropwizard жалуется:

Exception in thread "main" java.lang.IllegalArgumentException: Unable to override server.applicationConnectors[0].port; node with index not found. 
+0

Ищите это целую вечность! благодаря! –

10

Это то, что я сделал для моих тестовых приложений (0.7. x, 0.8.x, 0.9.x):

public class TestConfiguration extends Configuration { 

    public TestConfiguration() { 
    super(); 
    // The following is to make sure it runs with a random port. parallel tests clash otherwise 
    ((HttpConnectorFactory) ((DefaultServerFactory) getServerFactory()).getApplicationConnectors().get(0)).setPort(0); 
    // this is for admin port 
    ((HttpConnectorFactory) ((DefaultServerFactory) getServerFactory()).getAdminConnectors().get(0)).setPort(0); } } 

0 дает случайный порт, который доступен.

Я знаю, что это не очень, но не удалось найти лучший способ сделать это программно. Мне нужно было убедиться, что порты не сталкиваются между различными интеграционными тестами, потому что они работают параллельно. Я считаю, что создание yml-файла случайным образом для каждого теста было бы более уродливым.

О, и это, как вы получите работает порт позже:

@Override 
    public void run(TestConfiguration configuration, Environment environment) throws Exception { 
    this.environment = environment; 
    // do other stuff if you need to 
    } 

    public int getPort() { 
    return ((AbstractNetworkConnector) environment.getApplicationContext().getServer().getConnectors()[0]).getLocalPort(); 
    } 
+0

Работает также с 0.8.x – MAGx2

+0

Да, а также 0.9.x на самом деле. Я обновлю ответ. – Natan

1

Для Dropwizard 0.8.0 -

Файл YAML может быть -

server: 
    type: simple 
    connector: 
     type: http 
     port: 80 

Если вы хотите изменить порты из командной строки,

java -Ddw.server.connector.port=9090 -jar yourapp.jar server yourconfig.yml 

Команда будет работать только в том случае, если у вас есть запись в файле YAML. DW требует значения по умолчанию, которое оно может переопределить.

+0

Это сработало для меня. Я установил оба в один и тот же порт. – stuart

1

Для Dropwizard 0.6.2 вы можете программно изменить порт, как показано ниже в вашем классе обслуживания.

import com.yammer.dropwizard.config.Configuration; 
import com.yammer.dropwizard.config.Bootstrap; 
import com.yammer.dropwizard.config.Environment; 
import com.yammer.dropwizard.config.HttpConfiguration; 
import com.yammer.dropwizard.Service; 

public class BlogService extends Service<Configuration> { 

public static void main(String[] args) throws Exception { 
    new BlogService().run(new String[] {"server"}); 
} 

@Override 
public void initialize(Bootstrap<Configuration> bootsrap) { 
    bootsrap.setName("blog"); 
}  


public void run(Configuration configuration, Environment environment) throws Exception { 

    HttpConfiguration config = new HttpConfiguration(); 
    config.setPort(8085); 
    config.setAdminPort(8086); 
    configuration.setHttpConfiguration(config); 
} 

} 
2

Если вы хотите, чтобы изменить при использовании времени выполнения

-Ddw.server.applicationConnectors[0].port=9090 -Ddw.server.adminConnectors[0].port=9091 

Я использовал его с версией 1.0.5

0

мне нужно установить порты, но я не мог установите их из командной строки. Я закончил с этим решением:

public static void main(String[] args) throws Exception { 
    String applicationPort = "9090"; 
    String adminPort = "9091"; 

    System.setProperty("dw.server.applicationConnectors[0].port", applicationPort); 
    System.setProperty("dw.server.adminConnectors[0].port", adminPort); 

    new Main().run(args); 
} 

Это делается с помощью Dropwizard 1.3.0-rc7

Смежные вопросы