Come configurare la porta per un'applicazione Spring Boot


798

Come si configura la porta TCP / IP ascoltata da un'applicazione Spring Boot, quindi non utilizza la porta predefinita di 8080.


5
Se qualcuno è interessato, qui viene mostrato come avere più porte - stackoverflow.com/questions/36357135/...
Betlista

se si utilizza il file "yml" per la configurazione, è possibile utilizzare questo server: port: 8081 Annotare anche la classe principale come "@SpringBootApplication" e rimuovere @ EnableAutoConfiguration
Keaz il

il tuo progetto [application.properties] per aggiungere server.port = 8080
Lahiru Samishka

impostato server.port=8080nelle proprietà dell'applicazione. questa configurazione è nella ServerProperties.classclasse sotto org.springframework.boot.autoconfigure.web.
Atif

Risposte:


1227

Come detto nei documenti , impostare server.portcome proprietà di sistema usando l'opzione della riga di comando su jvm-Dserver.port=8090 o aggiungere application.propertiesin /src/main/resources/con

server.port=8090

Per l'uso della porta casuale

server.port=0

47
Quando si utilizza la porta casuale, le informazioni sulla porta possono essere @Value("${local.server.port}")
ottenute

42
In realtà l'opzione della riga di comando è --server.port = 8090 non -Dserver.port = 8090. docs.spring.io/spring-boot/docs/current/reference/html/…
ES Ninja - Alper

1
A complemento di questa risposta: secondo i documenti di primavera ci sono altri percorsi che puoi intraprendere application.properties. Nel mio caso è stato di grande aiuto.
sargas,

14
-Dserver.port = XXXX non ha funzionato per me. Ho usato la modalità variabile di ambiente del sistema operativo: $ SERVER_PORT=8090 java -jar <path/to/my/jar>
Soumya Kanti

10
Entrambi (1) java -Dserver.port=XXXX -jar <path/to/my/jar>e (2) java -jar <path/to/my/jar> --server.port=YYYYfunzionano. Il primo comando definisce la server.portproprietà di sistema e il secondo comando passa la proprietà attraverso gli argomenti della riga di comando ( String... argsnel mainmetodo). Inoltre, se corri con java -Dserver.port=XXXX -jar <path/to/my/jar> --server.port=YYYY, YYYYha la precedenzaXXXX , ecco perché Spring Boot Externalized Configuration è così affascinante.
tan9

210

Esistono due modi principali per modificare la porta in Tomcat incorporato in un'applicazione Spring Boot.

Modifica application.properties

Per prima cosa puoi provare il file application.properties nella cartella / resources:

server.port = 8090

file application.properties

Modifica un'opzione VM

Il secondo modo, se vuoi evitare di modificare qualsiasi file e archiviare qualcosa che ti serve solo sul tuo locale, puoi usare un vm arg:

Vai a Esegui -> Modifica configurazioni -> Opzioni VM

-Dserver.port=8090

Cambia porta con un vm arg

Inoltre, se hai bisogno di ulteriori informazioni, puoi visualizzare il seguente post di blog qui: Modifica della porta in un'applicazione Spring Boot


In STS 4 è in esecuzione -> Esegui configurazioni -> principale, quindi scorri verso il basso fino a Tabella con nome e valore dei parametri
serv-inc,

155

Poiché Spring Boot fornisce vari meccanismi di esternalizzazione della configurazione (attraverso varie PropertySourceimplementazioni e / o processori collegati Environmentnell'oggetto in ordine), è possibile impostare qualsiasi proprietà al di fuori del proprio archivio jar attraverso i seguenti metodi:

  1. Passa la proprietà tramite l'argomento della riga di comando come argomento dell'applicazione

    java -jar <path/to/my/jar> --server.port=7788
  2. Dalla proprietà in SPRING_APPLICATION_JSON(Spring Boot 1.3.0+)

    • Definire la variabile di ambiente nella shell U * IX:

      SPRING_APPLICATION_JSON='{"server.port":7788}' java -jar <path/to/my/jar>
    • Utilizzando la proprietà di sistema Java:

      java -Dspring.application.json='{"server.port":7788}' -jar <path/to/my/jar>
    • Passa attraverso l'argomento della riga di comando:

      java -jar <path/to/my/jar> --spring.application.json='{"server.port":7788}'
  3. Definire la proprietà di sistema JVM

    java -Dserver.port=7788 -jar <path/to/my/jar>
  4. Definire la variabile di ambiente del sistema operativo

    • Shell U * IX

      SERVER_PORT=7788 java -jar <path/to/my/jar>
    • finestre

      SET SERVER_PORT=7788
      java -jar <path/to/my/jar>
  5. Inserisci la proprietà nel ./config/application.properties file di configurazione

    server.port=7788

    e corri:

     java -jar <path/to/my/jar>
  6. Posizionare la proprietà in ./config/application.yaml

    server:
        port: 7788

    e corri:

     java -jar <path/to/my/jar>
  7. Posizionare la proprietà in ./application.properties

    server.port=7788

    e corri:

     java -jar <path/to/my/jar>
  8. Posizionare la proprietà in ./application.yaml

    server:
        port: 7788

    e corri:

     java -jar <path/to/my/jar>

È possibile combinare tutti i metodi sopra elencati e la precedente configurazione nell'elenco ha la precedenza su quest'ultima.

Per esempio:

SERVER_PORT=2266 java -Dserver.port=5566 -jar <path/to/my/jar> --server.port=7788

Il server si avvierà e ascolterà sulla porta 7788.

Questo è molto utile fornendo proprietà predefinite in PropertySource con precedenza inferiore (e di solito impacchettato nell'archivio o codificato nell'origine), e quindi sovrascriverlo nell'ambiente di runtime. Ed è la filosofia progettuale di Spring Boot:

Essere sbalzato fuori dagli schemi, ma allontanarsi rapidamente quando i requisiti iniziano a divergere dalle impostazioni predefinite.


SERVER_NAMEalla server.nameconversione è stato fatto da Binding Rilassato .


108

inoltre, è possibile configurare la porta a livello di codice

@Configuration
public class ServletConfig {
    @Bean
    public EmbeddedServletContainerCustomizer containerCustomizer() {
        return (container -> {
            container.setPort(8012);
        });
    }
}

Funziona e è molto utile quando hai una porta nel tuo file di configurazione e vuoi impostarla durante il runtime.
Xdg,

4
Ciò è stato utile quando avevo bisogno di distribuire un'applicazione in un servizio AWS Elastic Beanstalk, per ottenere la porta da una variabile di ambiente.
Martin Hansen,

Questo è super utile quando tutto ciò che vuoi è un'unità autonoma o un test di integrazione, +1.
Priidu Neemre,

Molto utile quando la variabile env per la porta è già definita con un nome diverso.
higuaro,

2
Non è il @Configurationinvece di @Controller? Si prega di aggiornare in tal caso.
Lucky

82

Puoi impostare la porta nel codice java:

HashMap<String, Object> props = new HashMap<>();
props.put("server.port", 9999);

new SpringApplicationBuilder()
    .sources(SampleController.class)                
    .properties(props)
    .run(args);

O in application.yml:

server:
    port: 9999

O in application.properties:

server.port=9999

O come parametro della riga di comando:

-Dserver.port=9999

L'uso di HashMap funzionerà solo se nessuna porta è impostata in application.properties o .yml.
Milgo,

79

Se desideri eseguirlo localmente, usa questo -

mvn spring-boot:run -Drun.jvmArguments='-Dserver.port=8085'

A partire da Spring Boot 2.0 , ecco il comando che funziona (gli indizi erano qui ):

mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=8085

1
A partire da Spring Boot 2, dovresti usare spring-boot.run.jvmArguments.
mapm,

54

Nel caso tu stia usando application.ymlaggiungi le seguenti linee ad esso

server:
     port: 9000

e ovviamente 0 per porta casuale.


1
questo non sembra funzionare. Ho usato server.port in application.yml e ha funzionato
yathirigan il

47

Come spiegato nella documentazione di primavera , ci sono diversi modi per farlo:

O si imposta la porta nella riga di comando (ad esempio 8888)

-Dserver.port=8888 o --server.port=8888

Esempio : java -jar -Dserver.port=8888 test.jar

Oppure si imposta la porta in application.properties

server.port=${port:4588}

oppure (in application.yml con sintassi yaml)

server:
   port: ${port:4588}

Se la porta passata da -Dport (o -Dserver.port) è impostata nella riga di comando, questa porta verrà presa in considerazione. In caso contrario, la porta sarà 4588 per impostazione predefinita.

Se vuoi forzare la porta nel file delle proprietà qualunque sia la variabile d'ambiente, devi solo scrivere:

server.port=8888

39

Includi sotto la proprietà in application.properties

server.port=8080

23

Quando hai bisogno di un modo programmatico di farlo, puoi impostarlo durante l'avvio:

System.getProperties().put( "server.port", 80 );
SpringApplication.run(App.class, args);

Questo potrebbe aiutare per cose come la porta dipendente dall'ambiente. Buona giornata


2
System.setProperty("server.port", 80);è un altro modo per ottenere lo stesso.
hd1,

@ hd1, ho aggiunto le nostre risposte alla risposta principale, controlla e modifica come meglio credi
Luis Mauricio

18

È possibile specificare la porta sovrascrivendo il EmbeddedServletContainerFactorybean all'interno della propria configurazione (basata su Java o XML). Lì puoi specificare la porta per il contenitore servlet incorporato usato. Per favore, vedi Spring Boot - Core "Embedded Servlet Container Support" paragrafo ed esempio qui. Spero che sia di aiuto.



Ecco un link corrente alla sezione di sostituzione programmatica: docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/…
jocull


17

Per estendere altre risposte:

C'è una sezione nei documenti per i test che spiega come configurare la porta per i test di integrazione:


Ai test di integrazione, la configurazione della porta viene effettuata utilizzando l'annotazione @SpringBootTeste i webEnvironmentvalori.


Porta casuale:

@SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT)

È possibile iniettare il valore usando @LocalServerPortquale è uguale a @Value("${local.server.port}").

  • Esempio:

Configurazione del test della porta casuale:

@RunWith(SpringRunner.class
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class ExampleTest {
   ...
   @LocalServerPort //to inject port value
   int port;
}

Porta definita:

@SpringBootTest(webEnvironment=WebEnvironment.DEFINED_PORT)

Prende il valore da server.portif se definito.

  • Se è definito usando @TestPropertySource(properties = "server.port=9192") , sostituisce altri valori definiti.
  • In caso contrario, prende il valore da src/test/resources/application.properties (se esiste).
  • E infine, se non è definito, inizia con il valore predefinito 8080.

Esempio:

Configurazione test porta definita:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@TestPropertySource(properties = "server.port=9192")
public class DemoApplicationTests {

    @Test
    public void contextLoads() {
    }

}

17

All'avvio dell'applicazione di avvio a molla, il server incorporato come Tomcat si avvia con una porta predefinita. Tomcat incorporato inizia con la porta 8080 come impostazione predefinita. Esistono molti modi per modificare la porta del server predefinita.

Utilizzo del file delle proprietà (.properties / .yml)

Per cambiare la porta del server usando il file delle proprietà, dobbiamo configurare la proprietà server.port .

un. Utilizzo di application.properties in classpath come src \ main \ resources \ application.properties

server.port = 8585

Il server inizierà con la porta 8585. Per ottenere la porta del server casuale, assegnare 0 alla proprietà.

server.port = 0

Ora l'avvio a molla avvierà il server su una porta che non è attualmente utilizzata da alcun server nel sistema.

b. Utilizzo di application.yml in classpath come src \ main \ resources \ application.yml.

server:
  port: 8585 

Il server inizierà con la porta 8585.

Per la porta casuale, assegnare 0.

server:
  port: 0 

Utilizzo del comando java con --server.port o -Dserver.port

Supponiamo di avere un JAR eseguibile chiamato my-app.jar, quindi durante l'avvio dell'applicazione di avvio a molla utilizzando il comando java possiamo usare l'argomento come segue.

Utilizzando --server.port

java -jar my-app.jar  --server.port=8585

Utilizzando -Dserver.port

java -jar -Dserver.port=8585 my-app.jar

Il server inizierà con la porta 8585.

Utilizzo del comando java con --port o -Dport in breve

Per rendere --server.port e -Dserver.port in breve, possiamo rimuovere le parole chiave del server e renderle qualsiasi parola breve come --port e -Dport. Possiamo usare qualsiasi parola chiave breve. Qui stiamo usando port come parola chiave breve. Per raggiungerlo, dobbiamo configurare il segnaposto nel file delle proprietà come segue.

Utilizzando application.properties

server.port=${port:8282}

Utilizzando application.yml

server:
   port: ${port:8282}

Se non passiamo la porta come argomento, per impostazione predefinita il server inizierà con 8282. Se vogliamo una porta diversa, allora dobbiamo passare la porta desiderata nell'argomento come segue. Supponiamo di avere un JAR eseguibile chiamato my-app.jar.

Usando --port

java -jar my-app.jar --port=8585 

Utilizzo di -Dport

java -jar -Dport=8585 my-app.jar 

Il server inizierà con la porta 8585.

Utilizzo di SERVER_PORT con SpringApplication a livello di codice

SpringApplication ha un metodo come setDefaultProperties () che viene utilizzato per modificare le proprietà predefinite dell'avvio a molla. Supponiamo di voler cambiare la porta predefinita, quindi dobbiamo creare una mappa e inserire una porta con chiave SERVER_PORT. Trova l'esempio.

MyApplication.java

package com.humoyun;

import java.util.HashMap;
import java.util.Map;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(MyApplication.class);
        Map<String, Object> map = new HashMap<>();
        map.put("SERVER_PORT", "8585");
        application.setDefaultProperties(map);
        application.run(args);
        }     
} 

L'avvio a molla avvierà il server con la porta 8585.


17

Esistono tre modi per farlo a seconda del file di configurazione dell'applicazione che si sta utilizzando

a) Se si utilizza il set di file application.properties

server.port = 8090

b) Se si utilizza il file application.yml , impostare la proprietà della porta del server in formato YAML come indicato di seguito

server:
     port: 8090

c) È inoltre possibile impostare la proprietà come proprietà di sistema nel metodo principale

System.setProperty("server.port","8090");

15

se stai usando il gradle come strumento di compilazione, puoi impostare la porta del server nel tuo file application.yml come:

server:
  port: 8291

Se si utilizza maven, è possibile impostare la porta nel file application.properties come:

server.port: 8291

per application.properties èserver.port = 8291
iQuestProgrammer il


13
  1. Come tutti hanno detto, è possibile specificare in application.properties
    server.port = 9000 (potrebbe essere qualsiasi altro valore)

  2. Se stai usando l'attuatore a molla nel tuo progetto, per impostazione predefinita punta a
    8080 e se vuoi cambiarlo, allora in application.properties menziona
    management.port = 9001 (potrebbe essere qualsiasi altro valore)


12

Aggiungi questo nel tuo application.propertiesfile

server.port= 8080

2
Benvenuti in SO :-), per favore, guarda Come rispondere
JimHawkins,

Perché aggiungere la stessa risposta un anno dopo?!? ed server.port 8080è sintassi errata per il file delle proprietà Java ...
Betlista,

12

Nel application.propertiesfile, aggiungi questa riga:

server.port = 65535

dove posizionare quella torta:

24.3 File delle proprietà dell'applicazione

SpringApplication carica le proprietà dai file application.properties nei seguenti percorsi e le aggiunge all'ambiente Spring:

A /config subdirectory of the current directory
The current directory
A classpath /config package
The classpath root

L'elenco è ordinato per precedenza (le proprietà definite nelle posizioni più alte nell'elenco hanno la precedenza su quelle definite nelle posizioni inferiori).

Nel mio caso l'ho messo nella directory in cui il jar file.

A partire dal:

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config-application-property-files


12

Per impostazione predefinita, l'app di avvio a molla inizia con il server Tomcat incorporato avvia alla porta predefinita 8080. Spring ti offre le seguenti personalizzazioni diverse, puoi sceglierne una.

NOTA : è possibile utilizzare server.port = 0 Spring Boot troverà qualsiasi porta casuale http non assegnata per noi.

1) application.properties

server.port=2020

2) application.yml

server:  
     port : 2020

3) Modificare la porta del server a livello di codice

3.1) Implementando l'interfaccia WebServerFactoryCustomizer - Spring 2.x

@Component
public class MyTomcatWebServerCustomizer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {

    @Override
    public void customize(TomcatServletWebServerFactory factory) {
        // customize the factory here
        factory.setPort(2020);
    }
}

3.2) Implementando l'interfaccia EmbeddedServletContainerCustomizer - Spring 1.x

@Component
public class CustomizationBean implements EmbeddedServletContainerCustomizer {

    @Override
    public void customize(ConfigurableEmbeddedServletContainer container) {
        // customize here
        container.setPort(2020);
    }
}

4) Utilizzando l'opzione della riga di comando

 java -jar spring-boot-app.jar -Dserver.port=2020

10

In effetti, il modo più semplice è impostare la proprietà server.port .

Se stai usando STS come IDE, dalla versione 3.6.7 hai effettivamente Spring Properties Editor per l'apertura del file delle proprietà.

Questo editor fornisce il completamento automatico per tutte le proprietà di Spring Boot. Se scrivi port e premi CTRL + SPACE, server.port sarà la prima opzione.


1
Oppure, anche se si utilizza Intellij IDEA, anche il completamento automatico funziona. ;)
Lucky

9

L'uso della proprietà server.port = 8080 per esempio come menzionato in altre risposte è sicuramente un modo per procedere. Volevo solo dire che potresti anche esporre una proprietà di ambiente:

SERVER_PORT=8080

Poiché l'avvio a molla è in grado di sostituire "." per "_" e inferiore alla maiuscola per le variabili di ambiente nelle versioni recenti. Ciò è particolarmente utile nei contenitori in cui tutto ciò che devi fare è definire quella variabile d'ambiente senza aggiungere / modificare application.propertieso passare le proprietà del sistema attraverso la riga di comando (es. -Dserver.port=$PORT)


SERVER_PORT=8081 mvn spring-boot:run
nobar,

8

Spero che questo aiuti

application.properties => 

server.port = 8090

application.yml => 

server
  port: 8090

application.yml => server: porta: 8090
geek

8

Fornire il numero di porta nel file application.properties risolverà il problema

 server.port = 8080

"la porta dipende dalla tua scelta, dove vuoi ospitare l'applicazione"


7

È possibile aggiungere la porta nei metodi seguenti.

  1. Esegui -> sezione Configurazioni

  2. In application.xmlaggiuntaserver.port=XXXX


1
Intendi application.ymle quale IDE stai usando? Si prega di essere specifici.
Lucky

7

Puoi impostarlo in application.properties in / src / main / resources /

server.port = 8090

7

Basta avere un application.propertiesin src/main/resourcesdel progetto e dare lì

server.port=****

dove si ****riferisce al numero di porta.


7

1.1 Aggiornamento tramite un file delle proprietà.

/src/main/resources/application.properties

server.port = 8888

Aggiornamento tramite un file yaml.

   server:

     port: 8888

EmbeddedServletContainerCustomizer

@Component
public class CustomContainer implements EmbeddedServletContainerCustomizer {

    @Override
    public void customize(ConfigurableEmbeddedServletContainer container) {

        container.setPort(8888);

    }

}

6

È inoltre possibile utilizzare SERVER_PORTla variabile di ambiente per configurare la porta Spring Boot. Basta impostare la variabile di ambiente e riavviare l'app:

set SERVER_PORT=9999 // on windows machine
export SERVER_PORT=9999 // on linux

Si noti che se non si impostano tali variabili di ambiente a livello di sistema, è necessario eseguire l'app di avvio nella stessa sessione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.