Domanda

Ho un servizio di riposo Jersey basato su Dropwizard in esecuzione sulle porte predefinite 8080 (Servizio) e 8081 (admin), ho bisogno di modificare le porte predefinite in qualcosa che è meno comunemente usato, non sono in grado di trovare alcuna informazione afallo, qualcuno può indicarmi per farlo?

È stato utile?

Soluzione

È possibile aggiornare le porte nel file di configurazione YAML:

http:
  port: 9000
  adminPort: 9001
.

Vedi http://www.dropwizard.io/0.9.2/docs/Manuale / Configurazione.html # http per ulteriori informazioni.

Modifica

Se è stato migrato su Dropwizard 0.7.x, 0.8.x, 0.9.x è possibile utilizzare quanto segue:

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

Altri suggerimenti

Dalla riga di comando, è possibile impostarli in questo modo, in Dropwizard 0.6:

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

Se si utilizza Dropwizard 0.7, le proprietà del sistema sono impostate in questo modo:

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

Sembra che, se si configurano le porte attraverso le proprietà del sistema, è inoltre necessario impostarli nell'YML (la proprietà del sistema ha la precedenza, comunque).Almeno questo mi sta accadendo in Dropwizard 0.7.Esempio della configurazione della porta YAML:

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

Se non metti quelle porte nello YAML, il Dropwizard si lamenta:

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

Questo è quello che ho fatto per le mie applicazioni di test (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 fornisce una porta casuale che è disponibile.

So che non è carina ma non ho trovato un modo migliore per farlo a livello programmatico.Avevo bisogno di assicurarmi che le porte non si scontrano tra diversi test di integrazione, perché funzionano in parallelo.Creare un file YML in modo casuale per ogni test sarebbe stato più brutto credo.

Oh e questo è il modo in cui ottieni la porta in esecuzione più tardi:

@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();
  }
.

Non lavoro mai con Dropwizard prima, creando solo servizi semplici utilizzando Jersey.Ho deciso di vedere il manuale dell'utente e ho immediatamente trovato una descrizione delle impostazioni.

Manuale di configurazione Dropwizard

.

È possibile sovrascrivere le impostazioni di configurazione passando speciali Proprietà del sistema Java quando si avvia il servizio.Le sostituzioni devono iniziare con il prefisso DW., Seguito dal percorso del valore di configurazione sovrascritto. Ad esempio, per sovrascrivere la porta HTTP da utilizzare, è possibile avviare il servizio come questo:

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

è adatto a te?

Se vuoi che venga modificato a Dun-Time Uso

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

L'ho usato con la versione 1.0.5

Per Dropwizard 0.6.2 È possibile modificare la porta a livello programmatico come di seguito nella classe di servizio.

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

}
.

Avevo bisogno di impostare le porte ma non potevo impostarle dalla riga di comando.Ho finito con questa soluzione:

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

Questo viene fatto usando Dropwizard 1.3.0-rc7

per Dropwizard 0.8.0 -

Il tuo file YAML può essere -

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

Se si desidera modificare le porte dalla riga di comando,

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

Il comando funzionerà solo se hai la voce nel file YAML.DW ha bisogno di un valore predefinito che può ignorare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top