스프링 부트 애플리케이션 용 포트를 구성하는 방법


796

Spring Boot 애플리케이션이 청취하는 TCP / IP 포트를 구성하여 기본 포트 8080을 사용하지 않는 방법.


5
누군가 관심이 있다면, 여기에 여러 포트를 갖는 방법이 표시됩니다.- stackoverflow.com
questions

구성에 "yml"파일을 사용하는 경우이 서버를 사용할 수 있습니다. 포트 : 8081 또한 기본 클래스에 "@SpringBootApplication"으로 주석을 달고 @ EnableAutoConfiguration
Keaz

프로젝트 [application.properties]를 server.port = 8080 추가하세요
Lahiru Samishka

server.port=8080응용 프로그램 속성에서 설정 합니다. 이 구성은 ServerProperties.class클래스 아래에 org.springframework.boot.autoconfigure.web있습니다.
Atif

답변:


1226

로이 문서에서 말했다 중 하나를 설정 server.portJVM에 명령 줄 옵션을 사용하여 시스템 속성으로 -Dserver.port=8090또는 추가 application.properties/src/main/resources/

server.port=8090

임의 포트 사용

server.port=0

47
임의의 포트를 사용하면 포트 정보를 얻을 수 있습니다@Value("${local.server.port}")
azizunsal

42
실제로 명령 행 옵션은 --Dserver.port = 8090이 아닌 --server.port = 8090입니다. docs.spring.io/spring-boot/docs/current/reference/html/…
Opster ES Ninja-Alper

1
이 답변에 대한 칭찬 : 스프링 문서 에 따르면 다른 경로를 사용할 수 있습니다 application.properties. 제 경우에는 많은 도움이되었습니다.
sargas

14
-Dserver.port = XXXX가 작동하지 않았습니다. 내가 사용 OS 환경 변수 모드 : $ SERVER_PORT=8090 java -jar <path/to/my/jar>
Soumya Kanti

10
(1) java -Dserver.port=XXXX -jar <path/to/my/jar>과 (2) 모두 java -jar <path/to/my/jar> --server.port=YYYY작동합니다. 첫 번째 명령은 server.port시스템 속성을 정의 하고 두 번째 명령 String... argsmain메서드 의 명령 줄 인수를 통해 속성을 전달합니다 . 당신이 실행하는 경우 또한 java -Dserver.port=XXXX -jar <path/to/my/jar> --server.port=YYYY, YYYY보다 우선 XXXX봄 부팅 외부화 구성이 너무 매력적인 이유이있다.
tan9

209

스프링 부트 애플리케이션의 Embedded Tomcat에서 포트를 변경하는 주요 방법은 두 가지가 있습니다.

application.properties 수정

먼저 / resources 폴더에서 application.properties 파일을 시도 할 수 있습니다.

server.port = 8090

application.properties 파일

VM 옵션 수정

두 번째 방법은 파일을 수정하거나 로컬에서만 필요한 것을 체크인하지 않으려면 vm arg를 사용할 수 있습니다.

실행-> 구성 편집-> VM 옵션으로 이동하십시오.

-Dserver.port=8090

vm arg로 포트 변경

또한 자세한 정보가 필요하면 여기에서 다음 블로그 게시물을 볼 수 있습니다 . Spring Boot 응용 프로그램에서 포트 변경


STS 4에서는이 실행에있다 -> 실행 구성 -> 주, 다음 매개 변수 이름과 값을 테이블 아래로 스크롤
SERV-INC

155

Spring Boot는 (다양한 구현 및 / 또는 객체에 순서대로 연결된 프로세서를 통해) 다양한 구성 외부화 메커니즘을 제공하므로 다음 방법을 통해 jar 아카이브 외부 의 모든 속성을 설정할 수 있습니다 .PropertySourceEnvironment

  1. 명령 줄 인수를 통해 속성을 응용 프로그램 인수로 전달

    java -jar <path/to/my/jar> --server.port=7788
  2. SPRING_APPLICATION_JSON(Spring Boot 1.3.0+)의 속성에서

    • U * IX 쉘에서 환경 변수를 정의하십시오.

      SPRING_APPLICATION_JSON='{"server.port":7788}' java -jar <path/to/my/jar>
    • Java 시스템 특성을 사용하여 다음을 수행하십시오.

      java -Dspring.application.json='{"server.port":7788}' -jar <path/to/my/jar>
    • 명령 행 인수를 전달하십시오.

      java -jar <path/to/my/jar> --spring.application.json='{"server.port":7788}'
  3. JVM 시스템 특성 정의

    java -Dserver.port=7788 -jar <path/to/my/jar>
  4. OS 환경 변수 정의

    • U * IX 쉘

      SERVER_PORT=7788 java -jar <path/to/my/jar>
    • 윈도우

      SET SERVER_PORT=7788
      java -jar <path/to/my/jar>
  5. 구성 파일에 특성 ./config/application.properties 배치

    server.port=7788

    다음을 실행하십시오.

     java -jar <path/to/my/jar>
  6. 에 장소 배치 ./config/application.yaml

    server:
        port: 7788

    다음을 실행하십시오.

     java -jar <path/to/my/jar>
  7. 에 장소 배치 ./application.properties

    server.port=7788

    다음을 실행하십시오.

     java -jar <path/to/my/jar>
  8. 에 장소 배치 ./application.yaml

    server:
        port: 7788

    다음을 실행하십시오.

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

위의 방법을 모두 결합 할 수 있으며 목록의 이전 구성이 후자의 구성보다 우선합니다.

예를 들면 다음과 같습니다.

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

서버가 시작되고 포트 7788에서 수신 대기합니다.

이는 우선 순위가 낮은 PropertySources의 기본 특성 (보통 아카이브에 패키지되거나 소스로 코딩 됨)을 제공 한 다음 런타임 환경에서이를 대체하는 데 매우 유용합니다. Spring Boot의 디자인 철학은 다음과 같습니다.

기본적으로 의견을 제시하되 요구 사항이 기본값에서 벗어나기 시작하면 신속하게 벗어날 수 있습니다.


SERVER_NAMEserver.name변환에 의해 이루어졌다 편안한 바인딩 .


108

또한 프로그래밍 방식으로 포트를 구성 할 수 있습니다

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

이것은 자신의 설정 파일에 포트가 있고 런타임 중에 설정하려고 할 때 유용하며 매우 유용합니다.
Xdg

4
환경 변수에서 포트를 가져 오기 위해 AWS Elastic Beanstalk 서비스에 애플리케이션을 배포해야 할 때 유용했습니다.
Martin Hansen

이것은 당신이 원하는 모든 것이 독립된 유닛 또는 통합 테스트 +1 일 때 매우 유용합니다.
Priidu Neemre

포트의 env 변수가 다른 이름으로 이미 정의되어있을 때 매우 유용합니다.
higuaro

2
@Configuration대신에 그렇지 @Controller않습니까? 그렇다면 업데이트하십시오.
Lucky

82

Java 코드로 포트를 설정할 수 있습니다.

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

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

또는 application.yml에서 :

server:
    port: 9999

또는 application.properties에서 :

server.port=9999

또는 명령 행 매개 변수로 :

-Dserver.port=9999

HashMap 사용은 applications.properties 또는 .yml에 포트가 설정되지 않은 경우에만 작동합니다.
Milgo

79

로컬로 실행하려면 다음을 사용하십시오.

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

현재 봄 부팅 2.0 , 여기에 명령의 그 작품 (단서가 있었다 여기 )

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

1
Spring Boot 2부터는를 사용해야합니다 spring-boot.run.jvmArguments.
mapm

54

사용 application.yml하는 경우 다음 줄을 추가하십시오

server:
     port: 9000

물론 임의의 포트의 경우 0입니다.


1
이것은 작동하지 않는 것 같습니다. application.yml에서 server.port를 사용했고 작동했습니다
yathirigan

47

Spring documentation 에서 설명했듯이 몇 가지 방법이 있습니다.

명령 행에서 포트를 설정하거나 (예 : 8888)

-Dserver.port=8888 또는 --server.port=8888

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

또는 application.properties에서 포트를 설정하십시오.

server.port=${port:4588}

또는 (yaml 구문이있는 application.yml에서)

server:
   port: ${port:4588}

-Dport (또는 -Dserver.port)에 의해 전달 된 포트가 명령 행에 설정되면이 포트가 고려됩니다. 그렇지 않은 경우 기본적으로 포트는 4588입니다.

환경 변수에 관계없이 속성 파일에 포트를 적용하려면 다음과 같이 작성하면됩니다.

server.port=8888


23

프로그래밍 방식으로 수행해야하는 경우 시작하는 동안 설정할 수 있습니다.

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

이것은 환경 종속 포트와 같은 것들에 도움이 될 수 있습니다. 좋은 하루 되세요


2
System.setProperty("server.port", 80);이를 달성하는 또 다른 방법입니다.
hd1

@ hd1, 나는 주요 답변에 대한 답변을 추가하고 확인하고 원하는대로 수정하십시오
Luis Mauricio

18

EmbeddedServletContainerFactory구성 내에서 Bean 을 대체 하여 포트를 지정할 수 있습니다 (Java 기반 또는 xml). 사용 된 임베디드 서블릿 컨테이너의 포트를 지정할 수 있습니다. Spring Boot-핵심 "내장 서블릿 컨테이너 지원"단락 및 예제를 참조하십시오 . 도움이 되었기를 바랍니다.



다음은 프로그래밍 방식의 재정의 섹션에 대한 현재 링크입니다. docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/…
jocull


17

다른 답변을 확장하려면

통합 문서에서 포트를 구성하는 방법을 설명하는 테스트 문서 섹션이 있습니다.


통합 테스트에서 포트 구성은 주석 @SpringBootTestwebEnvironment값을 사용하여 구성 됩니다.


랜덤 포트 :

@SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT)

@LocalServerPort와 동일한 값을 사용하여 값을 주입 할 수 있습니다 @Value("${local.server.port}").

  • 예:

임의 포트 테스트 구성 :

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

정의 된 포트 :

@SpringBootTest(webEnvironment=WebEnvironment.DEFINED_PORT)

server.portif가 정의 된 값을 가져옵니다 .

  • 을 사용하여 정의 된 경우 @TestPropertySource(properties = "server.port=9192")다른 정의 된 값보다 우선합니다.
  • 그렇지 않은 경우 값 src/test/resources/application.properties이 존재합니다 (있는 경우).
  • 마지막으로 정의되어 있지 않으면 default로 시작합니다 8080.

예:

정의 된 포트 테스트 구성 :

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

    @Test
    public void contextLoads() {
    }

}

17

스프링 부트 응용 프로그램이 시작되면 Tomcat과 같은 내장 서버가 기본 포트로 시작됩니다. 임베디드 Tomcat은 기본적으로 8080 포트로 시작합니다. 기본 서버 포트를 변경하는 방법에는 여러 가지가 있습니다.

속성 파일 사용 (.properties / .yml)

속성 파일을 사용하여 서버 포트를 변경하려면 server.port 속성 을 구성해야 합니다.

ㅏ. src \ main \ resources \ application.properties 와 같은 클래스 경로에서 application.properties 사용

server.port = 8585

서버는 8585 포트로 시작합니다. 임의의 서버 포트를 얻으려면 속성에 0을 할당하십시오.

server.port = 0

이제 스프링 부트는 시스템의 어떤 서버에서도 현재 사용하지 않는 포트에서 서버를 시작합니다.

비. src \ main \ resources \ application.yml 과 같은 클래스 경로에서 application.yml 사용

server:
  port: 8585 

서버는 8585 포트로 시작합니다.

임의 포트의 경우 0을 할당하십시오.

server:
  port: 0 

--server.port 또는 -Dserver.port와 함께 java 명령 사용

my-app.jar라는 실행 파일 JAR이 있다고 가정하고 java 명령을 사용하여 스프링 부트 응용 프로그램을 시작하는 동안 다음과 같이 인수를 사용할 수 있습니다.

--server.port 사용

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

-Dserver.port 사용

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

서버는 8585 포트로 시작합니다.

짧게 --port 또는 -Dport와 함께 java 명령 사용

--server.port와 -Dserver.port를 짧게 만들기 위해 server 키워드를 제거하고 --port 및 -Dport와 같은 짧은 키워드로 만들 수 있습니다. 짧은 키워드를 사용할 수 있습니다. 여기서 우리는 포트를 짧은 키워드로 사용하고 있습니다. 이를 위해서는 속성 파일에서 다음과 같이 자리 표시자를 구성해야합니다.

application.properties 사용

server.port=${port:8282}

application.yml 사용

server:
   port: ${port:8282}

포트를 인수로 전달하지 않으면 기본적으로 서버는 8282로 시작합니다. 다른 포트를 원하면 다음과 같이 인수로 원하는 포트를 전달해야합니다. my-app.jar라는 실행 파일 JAR이 있다고 가정하십시오.

--port 사용

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

-Dport 사용

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

서버는 8585 포트로 시작합니다.

프로그래밍 방식으로 SpringApplication과 함께 SERVER_PORT 사용

SpringApplication에는 스프링 부트 기본 속성을 변경하는 데 사용되는 setDefaultProperties () 메소드가 있습니다. 기본 포트를 변경하고 맵을 작성하고 SERVER_PORT 키를 사용하여 포트를 배치해야한다고 가정하십시오. 예를 찾으십시오.

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

스프링 부트는 8585 포트로 서버를 시작합니다.


17

사용중인 응용 프로그램 구성 파일에 따라 세 가지 방법이 있습니다.

a) application.properties 파일 세트를 사용중인 경우

server.port = 8090

b) 다음과 같이 application.yml 파일 세트 서버 포트 속성을 YAML 형식으로 사용하는 경우

server:
     port: 8090

c) 기본 방법 에서 속성을 시스템 속성으로 설정할 수도 있습니다

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

15

gradle을 빌드 도구로 사용하는 경우 application.yml 파일 에서 서버 포트를 다음 과 같이 설정할 수 있습니다 .

server:
  port: 8291

maven을 사용하는 경우 포트는 application.properties 파일에서 다음과 같이 설정할 수 있습니다 .

server.port: 8291

application.properties의 경우server.port = 8291
iQuestProgrammer


13
  1. 모두가 말했듯이 application.properties에서 지정할 수 있습니다.
    server.port = 9000 (다른 값이 될 수 있음)

  2. 프로젝트에서 스프링 액추에이터를 사용하는 경우 기본적으로
    8080을 가리키고 변경하려는 경우 application.properties에서
    management.port = 9001 (다른 값일 수 있음)을 언급하십시오.



12

에서 application.properties파일이 줄을 추가합니다 :

server.port = 65535

그 장소를 어디에 두십시오 :

24.3 응용 프로그램 속성 파일

SpringApplication은 다음 위치에있는 application.properties 파일에서 특성을로드하여 Spring 환경에 추가합니다.

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

목록은 우선 순위에 따라 정렬됩니다 (목록에서 높은 위치에 정의 된 속성은 낮은 위치에 정의 된 속성보다 우선 함).

제 경우에는 jar파일이 있는 디렉토리에 넣었습니다 .

에서:

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


12

기본적으로 스프링 부트 앱은 기본 포트 8080에서 내장 Tomcat 서버 시작으로 시작합니다. spring은 다음 중 하나를 선택할 수있는 다양한 사용자 정의를 제공합니다.

참고server.port = 0을 사용할 수 있습니다. 스프링 부트는 할당되지 않은 http 임의 포트를 찾습니다.

1) application.properties

server.port=2020

2) application.yml

server:  
     port : 2020

3) 프로그래밍 방식으로 서버 포트 변경

3.1) 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) EmbeddedServletContainerCustomizer 인터페이스 구현-Spring 1.x

@Component
public class CustomizationBean implements EmbeddedServletContainerCustomizer {

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

4) 명령 행 옵션 사용

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

10

실제로 가장 쉬운 방법은 server.port 속성 을 설정하는 것 입니다.

STS를 IDE로 사용하는 경우 버전 3.6.7부터는 실제로 특성 파일을 열 수있는 스프링 특성 편집기 가 있습니다.

이 편집기는 모든 Spring Boot 속성에 자동 완성 기능을 제공합니다. 포트 를 작성 하고 CTRL + SPACE를 누르면 server.port 가 첫 번째 옵션입니다.


1
또는 Intellij IDEA를 사용하는 경우 자동 완성 기능도 작동합니다. ;)
Lucky

9

예를 들어 다른 답변에서 언급 한 것처럼 server.port = 8080 속성을 사용하는 것이 확실히 방법입니다. 환경 속성을 노출 할 수도 있다고 언급하고 싶었습니다.

SERVER_PORT=8080

스프링 부트는 "."를 대체 할 수 있기 때문에 최근 버전의 환경 변수의 경우 "_"및 대문자에서 소문자로 표시됩니다. 당신이 꼭 모든 추가 / 편집하지 않고 해당 환경 변수를 정의 곳이 용기에 특히 유용합니다 application.properties명령 줄을 통해 시스템 특성을 나 전달 (예 -Dserver.port=$PORT)


SERVER_PORT=8081 mvn spring-boot:run
nobar

8

이 하나가 도움이되기를 바랍니다

application.properties => 

server.port = 8090

application.yml => 

섬기는 사람
  포트 : 8090

application.yml => 서버 : 포트 : 8090
괴짜

8

application.properties 파일에 포트 번호를 제공하면 문제가 해결됩니다.

 server.port = 8080

"포트는 응용 프로그램을 호스트하려는 선택에 따라 다릅니다"


7

아래 방법으로 포트를 추가 할 수 있습니다.

  1. 실행-> 구성 섹션

  2. application.xml추가server.port=XXXX


1
당신은 의미합니까 application.yml및 IDE 당신은 무엇을 사용하고 있습니까? 구체적으로 작성하십시오.
Lucky

7

application.properties에서 / src / main / resources / 아래에 설정할 수 있습니다.

server.port = 8090

7

그냥이 application.propertiessrc/main/resources프로젝트의 거기 제공

server.port=****

여기서 ****포트 번호를 나타냅니다.


7

1.1 속성 파일을 통한 업데이트

/src/main/resources/application.properties

server.port = 8888

yaml 파일을 통해 업데이트하십시오.

   server:

     port: 8888

EmbeddedServletContainerCustomizer

@Component
public class CustomContainer implements EmbeddedServletContainerCustomizer {

    @Override
    public void customize(ConfigurableEmbeddedServletContainer container) {

        container.setPort(8888);

    }

}

6

SERVER_PORT환경 변수를 사용 하여 스프링 부트 포트를 구성 할 수도 있습니다 . 환경 변수를 설정하고 앱을 다시 시작하십시오.

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

이러한 환경 변수를 시스템 전체에 설정하지 않으면 동일한 세션에서 부트 앱을 실행해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.