更改 Dropwizard 默认端口

问题描述 投票:0回答:12

我有一个基于 Dropwizard 的 Jersey REST 服务在默认端口 8080(服务)和 8081(管理)上运行,我需要将默认端口更改为不太常用的端口,我无法找到任何信息来执行此操作,有人可以指点我这样做吗?

java rest jersey dropwizard
12个回答
100
投票

您可以更新 yaml 配置文件中的端口:

http:
  port: 9000
  adminPort: 9001

请参阅 http://www.dropwizard.io/0.9.2/docs/manual/configuration.html#http 了解更多信息。

编辑

如果您已迁移到 Dropwizard 0.7.x、0.8.x、0.9.x,您可以使用以下命令:

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

34
投票

在 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.

14
投票

这就是我为测试应用程序所做的事情(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();
  }

6
投票

我以前从未使用过 dropwizard,只使用 jersey 创建简单的服务。我决定查看用户手册,并立即找到了设置说明。

Dropwizard配置手册

您可以在启动服务时通过传递特殊的 Java 系统属性来覆盖配置设置。覆盖必须以前缀 dw. 开头,后跟被覆盖的配置值的路径。 例如,要覆盖要使用的 HTTP 端口,您可以像这样启动服务:

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

适合你吗?


4
投票

如果您希望在运行时更改它,请使用

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

我用的是1.0.5版本


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 需要一个可以覆盖的默认值。


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);
}

}

1
投票

我需要设置端口,但无法从命令行设置它们。我最终得到了这个解决方案:

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


1
投票

在较新版本的 dropwizard 中(例如 2.0.25): 在资源目录中创建一个包含以下内容的属性文件 config.yml:

server:
   applicationConnectors:
    - type: http
      port: 5020
   adminConnectors:
    - type: http
      port: 5022

如果使用 Intellij IDE(2021 版),请记住将以下内容添加到运行配置程序参数:

server src/main/resources/config.yml

enter image description here


1
投票

您可以在这里进行所有配置来解决您的问题 https://www.dropwizard.io/en/latest/manual/configuration.html


0
投票

在您的 .yml 文件中进行这些更改

server:
  registerDefaultExceptionMappers: false
  applicationConnectors:
    - type: http
      port: 5020
  adminConnectors:
    - type: http
      port: 5022

0
投票

您还可以通过编程方式更改端口。使用此版本:

// https://mvnrepository.com/artifact/io.dropwizard/dropwizard-core
implementation("io.dropwizard:dropwizard-core:4.0.7")

您可以使用如下代码设置端口:

String httpPortStr = dotenv.get(HTTP_PORT, "8080");
try {
  httpPort = Integer.parseInt(httpPortStr);
  System.setProperty("dw.server.applicationConnectors[0].type", "http");
  System.setProperty("dw.server.applicationConnectors[0].port", httpPortStr);
} catch (NumberFormatException e) {
  throw new IllegalArgumentException("HTTP_PORT environment variable is not a valid number");
}
© www.soinside.com 2019 - 2024. All rights reserved.