Cách định cấu hình cổng cho ứng dụng Spring Boot


798

Làm cách nào để định cấu hình cổng TCP / IP được nghe bởi ứng dụng Spring Boot, vì vậy nó không sử dụng cổng mặc định là 8080.


5
Nếu ai đó quan tâm, ở đây sẽ chỉ ra cách có nhiều cổng - stackoverflow.com/questions/36357135/
Đổi

nếu bạn sử dụng tệp "yml" để định cấu hình thì bạn có thể sử dụng máy chủ này: port: 8081 Cũng chú thích lớp chính của bạn là "@SpringBootApplication" và xóa @ EnableAutoConfiguration
Keaz

dự án của bạn [application.properies] để thêm máy chủ.port = 8080
Lahiru Samishka

thiết lập server.port=8080trong các thuộc tính ứng dụng. cấu hình này là trong ServerProperties.classlớp dưới org.springframework.boot.autoconfigure.web.
Atif

Câu trả lời:


1227

Như đã nói trong tài liệu, được đặt server.portlàm thuộc tính hệ thống bằng tùy chọn dòng lệnh thành jvm -Dserver.port=8090hoặc thêm application.propertiesvào /src/main/resources/bằng

server.port=8090

Để sử dụng cổng ngẫu nhiên

server.port=0

47
Khi cổng ngẫu nhiên được sử dụng, thông tin cổng có thể nhận được với@Value("${local.server.port}")
azizunal

42
Thực tế tùy chọn dòng lệnh là --server.port = 8090 không -Dserver.port = 8090. docs.spring.io/spring-boot/docs/civerse/reference/html/NH
Opster ES Ninja - Alper

1
Như một lời khen cho câu trả lời này: Theo các tài liệu về mùa xuân, có những con đường khác bạn có thể đặt application.propertiesvào. Trong trường hợp của tôi đã giúp rất nhiều.
sargas

14
-Dserver.port = XXXX không hoạt động với tôi. Tôi đã sử dụng chế độ biến môi trường hệ điều hành: $ SERVER_PORT=8090 java -jar <path/to/my/jar>
Soumya Kanti

10
Cả (1) java -Dserver.port=XXXX -jar <path/to/my/jar>và (2) đều java -jar <path/to/my/jar> --server.port=YYYYhoạt động. Lệnh đầu tiên xác định thuộc tính server.porthệ thống và lệnh thứ hai chuyển thuộc tính thông qua các đối số dòng lệnh ( String... argstrong mainphương thức). Hơn nữa, nếu bạn chạy với java -Dserver.port=XXXX -jar <path/to/my/jar> --server.port=YYYY, YYYYđược ưu tiên hơn XXXX, đây là lý do tại sao Spring Boot Internalized Cấu hình rất quyến rũ.
tan9

209

Có hai cách chính để thay đổi cổng trong Tomcat nhúng trong Ứng dụng khởi động mùa xuân.

Sửa đổi ứng dụng. Sản phẩm

Trước tiên, bạn có thể thử tệp application.properIES trong thư mục / resource:

server.port = 8090

file application.properies

Sửa đổi tùy chọn VM

Cách thứ hai, nếu bạn muốn tránh sửa đổi bất kỳ tệp nào và kiểm tra thứ gì đó mà bạn chỉ cần trên máy cục bộ của mình, bạn có thể sử dụng vm arg:

Đi đến Chạy -> Chỉnh sửa Cấu hình -> Tùy chọn VM

-Dserver.port=8090

Thay đổi cổng với một vm arg

Ngoài ra, nếu bạn cần thêm thông tin, bạn có thể xem bài đăng blog sau đây tại đây: Thay đổi cổng trên Ứng dụng Spring Boot


Trong STS 4, nó đang chạy -> chạy cấu hình -> chính, sau đó cuộn xuống Bảng với Tên tham số và Giá trị
serv-inc

155

Vì Spring Boot cung cấp cơ chế bên ngoài cấu hình khác nhau (thông qua các PropertySourcetriển khai và / hoặc bộ xử lý khác nhau được nối vàoEnvironment đối tượng theo thứ tự), bạn có thể đặt bất kỳ thuộc tính nào bên ngoài kho lưu trữ jar của mình thông qua các phương pháp sau:

  1. Truyền thuộc tính thông qua đối số dòng lệnh làm đối số ứng dụng

    java -jar <path/to/my/jar> --server.port=7788
  2. Từ tài sản trong SPRING_APPLICATION_JSON (Spring Boot 1.3.0+)

    • Xác định biến môi trường trong vỏ U * IX:

      SPRING_APPLICATION_JSON='{"server.port":7788}' java -jar <path/to/my/jar>
    • Bằng cách sử dụng thuộc tính hệ thống Java:

      java -Dspring.application.json='{"server.port":7788}' -jar <path/to/my/jar>
    • Truyền qua đối số dòng lệnh:

      java -jar <path/to/my/jar> --spring.application.json='{"server.port":7788}'
  3. Xác định thuộc tính hệ thống JVM

    java -Dserver.port=7788 -jar <path/to/my/jar>
  4. Định nghĩa biến môi trường HĐH

    • Vỏ U * IX

      SERVER_PORT=7788 java -jar <path/to/my/jar>
    • các cửa sổ

      SET SERVER_PORT=7788
      java -jar <path/to/my/jar>
  5. Đặt tài sản vào ./config/application.properties tập tin cấu hình

    server.port=7788

    và chạy:

     java -jar <path/to/my/jar>
  6. Đặt tài sản vào ./config/application.yaml

    server:
        port: 7788

    và chạy:

     java -jar <path/to/my/jar>
  7. Đặt tài sản vào ./application.properties

    server.port=7788

    và chạy:

     java -jar <path/to/my/jar>
  8. Đặt tài sản vào ./application.yaml

    server:
        port: 7788

    và chạy:

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

Bạn có thể kết hợp tất cả các phương thức trên với nhau và cấu hình trước trong danh sách được ưu tiên so với phương thức sau.

Ví dụ:

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

Máy chủ sẽ bắt đầu và nghe trên cổng 7788.

Điều này rất hữu ích khi cung cấp các thuộc tính mặc định trong PropertySource với mức độ ưu tiên thấp hơn (và thường được đóng gói trong kho lưu trữ hoặc được mã hóa trong nguồn), sau đó ghi đè lên nó trong môi trường thời gian chạy. Và đó là triết lý thiết kế của Spring Boot:

Được đưa ra ý kiến, nhưng hãy nhanh chóng thoát ra khi các yêu cầu bắt đầu phân kỳ khỏi các mặc định.


SERVER_NAMEđể server.namechuyển đổi được thực hiện bởi Binding thư giãn .


108

Ngoài ra, bạn có thể cấu hình cổng lập trình

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

Điều này đang hoạt động và rất hữu ích, khi bạn có cổng trong tệp cấu hình của riêng bạn và muốn đặt nó trong thời gian chạy.
Xdg

4
Điều này rất hữu ích khi tôi cần triển khai một ứng dụng cho dịch vụ AWS Elastic Beanstalk, để lấy cổng từ một biến môi trường.
Martin Hansen

Điều này cực kỳ hữu ích khi tất cả những gì bạn muốn là một đơn vị độc lập hoặc kiểm tra tích hợp, +1.
Priidu Neemre

Rất hữu ích khi biến env cho cổng đã được xác định dưới một tên khác.
higuaro

2
Có phải nó @Configurationthay vì @Controller? Hãy cập nhật nếu có.
May mắn

82

Bạn có thể đặt cổng trong mã java:

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

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

Hoặc trong application.yml:

server:
    port: 9999

Hoặc trong ứng dụng. Sản phẩm:

server.port=9999

Hoặc như một tham số dòng lệnh:

-Dserver.port=9999

Sử dụng HashMap sẽ chỉ hoạt động nếu không có cổng nào được đặt trong ứng dụng. Sản phẩm hoặc .yml.
Milgo

79

Nếu bạn muốn chạy nó cục bộ, hãy sử dụng cái này -

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

Kể từ Spring Boot 2.0 , đây là lệnh hoạt động (manh mối đã ở đây ):

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

1
Bắt đầu từ Spring Boot 2, bạn nên sử dụng spring-boot.run.jvmArguments.
mapm

54

Trong trường hợp bạn đang sử dụng, hãy application.ymlthêm các dòng sau vào nó

server:
     port: 9000

và tất nhiên 0 cho cổng ngẫu nhiên.


1
điều này dường như không hoạt động. Tôi đã sử dụng server.port trong application.yml và nó đã hoạt động
yathirigan

47

Như đã giải thích trong tài liệu Spring , có một số cách để làm điều đó:

Hoặc bạn đặt cổng trong dòng lệnh (ví dụ 8888)

-Dserver.port=8888 hoặc là --server.port=8888

Thí dụ : java -jar -Dserver.port=8888 test.jar

Hoặc bạn đặt cổng trong application.properations

server.port=${port:4588}

hoặc (trong application.yml với cú pháp yaml)

server:
   port: ${port:4588}

Nếu cổng được truyền bởi -Dport (hoặc -Dserver.port) được đặt trong dòng lệnh thì cổng này sẽ được tính đến. Nếu không, cổng sẽ là 4588 theo mặc định.

Nếu bạn muốn thực thi cổng trong tệp thuộc tính bất kể biến môi trường, bạn chỉ cần viết:

server.port=8888

39

Bao gồm tài sản dưới đây trong application.properties

server.port=8080

23

Khi bạn cần một cách lập trình để thực hiện nó, bạn có thể thiết lập nó trong khi khởi động:

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

Điều này có thể giúp cho những thứ như cổng phụ thuộc môi trường. Chúc một ngày tốt lành


2
System.setProperty("server.port", 80);là một cách khác để đạt được như vậy.
hd1

@ hd1, tôi đã thêm câu trả lời của chúng tôi vào câu trả lời chính, kiểm tra và sửa đổi khi bạn thấy phù hợp
Luis Mauricio

18

Bạn có thể chỉ định cổng bằng cách ghi đè EmbeddedServletContainerFactorybean trong cấu hình của bạn (dựa trên java hoặc xml). Ở đó bạn có thể chỉ định cổng cho bộ chứa servlet nhúng được sử dụng. Xin vui lòng, xem Spring Boot - Ví dụ về đoạn văn "Hỗ trợ bộ chứa Servlet nhúng". Hi vọng điêu nay co ich.



Đây là một liên kết hiện tại đến phần ghi đè lập trình: docs.spring.io/spring-boot/docs/civerse-SNAPSHOT/reference/ phỏng
jocull


17

Để mở rộng các câu trả lời khác:

Có một phần trong tài liệu để kiểm tra giải thích cách định cấu hình cổng trong kiểm tra tích hợp:


Tại các thử nghiệm tích hợp, cấu hình cổng được thực hiện bằng cách sử dụng chú thích @SpringBootTestvà các webEnvironmentgiá trị.


Cổng ngẫu nhiên:

@SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT)

Bạn có thể tiêm giá trị bằng cách sử dụng @LocalServerPortgiống như @Value("${local.server.port}").

  • Thí dụ:

Cấu hình kiểm tra cổng ngẫu nhiên:

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

Cổng được xác định:

@SpringBootTest(webEnvironment=WebEnvironment.DEFINED_PORT)

Nó nhận giá trị từ server.portnếu được xác định.

  • Nếu được xác định bằng cách sử dụng @TestPropertySource(properties = "server.port=9192"), nó sẽ ghi đè các giá trị được xác định khác.
  • Nếu không, nó lấy giá trị từ src/test/resources/application.properties(nếu tồn tại).
  • Và cuối cùng, nếu nó không được xác định, nó bắt đầu với mặc định 8080.

Thí dụ:

Cấu hình kiểm tra cổng được xác định:

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

    @Test
    public void contextLoads() {
    }

}

17

Khi ứng dụng khởi động mùa xuân khởi động, máy chủ nhúng như Tomcat bắt đầu với một cổng mặc định. Tomcat nhúng bắt đầu với cổng 8080 như mặc định. Có nhiều cách để thay đổi cổng máy chủ mặc định.

Sử dụng tệp thuộc tính (.properations / .yml)

Để thay đổi cổng máy chủ bằng tệp thuộc tính, chúng ta cần cấu hình thuộc tính server.port .

a. Sử dụng application.properies trong classpath, chẳng hạn như src \ main \ resource \ application.properies

server.port = 8585

Máy chủ sẽ bắt đầu với cổng 8585. Để có được cổng máy chủ ngẫu nhiên, gán 0 cho thuộc tính.

server.port = 0

Bây giờ khởi động mùa xuân sẽ khởi động máy chủ trên một cổng hiện không được sử dụng bởi bất kỳ máy chủ nào trong hệ thống.

b. Sử dụng application.yml trong classpath, chẳng hạn như src \ main \ resource \ application.yml.

server:
  port: 8585 

Máy chủ sẽ bắt đầu với cổng 8585.

Đối với cổng ngẫu nhiên, gán 0.

server:
  port: 0 

Sử dụng lệnh java với --server.port hoặc -Dserver.port

Giả sử chúng ta có một JAR thực thi có tên là my-app.jar, sau đó trong khi bắt đầu ứng dụng khởi động mùa xuân bằng lệnh java, chúng ta có thể sử dụng đối số như sau.

Sử dụng --server.port

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

Sử dụng -Dserver.port

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

Máy chủ sẽ bắt đầu với cổng 8585.

Sử dụng java Command với --port hoặc -Dport in Short

Để viết tắt --server.port và -Dserver.port, chúng ta có thể xóa từ khóa máy chủ và biến nó thành bất kỳ từ khóa ngắn nào như --port và -Dport. Chúng tôi có thể sử dụng bất kỳ từ khóa ngắn. Ở đây chúng tôi đang sử dụng cổng như từ khóa ngắn. Để đạt được nó, chúng ta cần cấu hình giữ chỗ trong tệp thuộc tính như sau.

Sử dụng application.properies

server.port=${port:8282}

Sử dụng application.yml

server:
   port: ${port:8282}

Nếu chúng ta không vượt qua cổng làm đối số thì theo mặc định, máy chủ sẽ bắt đầu bằng 8282. Nếu chúng ta muốn có một cổng khác, thì chúng ta cần chuyển cổng mong muốn trong đối số như sau. Giả sử chúng ta có một JAR thực thi được đặt tên là my-app.jar.

Sử dụng --port

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

Sử dụng -Dport

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

Máy chủ sẽ bắt đầu với cổng 8585.

Sử dụng SERVER_PORT với SpringApplication lập trình

SpringApplication có một phương thức là setDefaultProperIES () được sử dụng để thay đổi các thuộc tính mặc định khởi động mùa xuân. Giả sử chúng ta muốn thay đổi cổng mặc định thì chúng ta cần tạo Bản đồ và đặt một cổng bằng khóa SERVER_PORT. Tìm ví dụ.

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

Spring boot sẽ khởi động máy chủ với cổng 8585.


17

Có ba cách để thực hiện tùy thuộc vào tệp cấu hình ứng dụng bạn đang sử dụng

a) Nếu bạn đang sử dụng tập tin application.properIES

server.port = 8090

b) Nếu bạn đang sử dụng tệp application.yml, đặt thuộc tính cổng máy chủ ở định dạng YAML như được đưa ra dưới đây

server:
     port: 8090

c) Bạn cũng có thể Đặt thuộc tính làm thuộc tính Hệ thống trong phương thức chính

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

15

nếu bạn đang sử dụng gradle làm công cụ xây dựng, bạn có thể đặt cổng máy chủ trong tệp application.yml của mình là:

server:
  port: 8291

Nếu bạn đang sử dụng maven thì cổng có thể được đặt trong tệp application.properations của bạn là:

server.port: 8291

cho application.properations của nóserver.port = 8291
iQuestProgrammer

14

Có nhiều thứ khác bạn có thể thay đổi trong cấu hình máy chủ bằng cách thay đổi application.properations. Giống như hết thời gian phiên, địa chỉ và cổng, vv Tham khảo bài viết dưới đây

ref: http://docs.spring.io/spring-boot/docs/1.4.x/reference/html/common-application-properIES.html

Tôi đã sử dụng một vài trong số họ như dưới đây.

server.session.timeout=1
server.port = 3029
server.address= deepesh

13
  1. Như mọi người đã nói, bạn có thể chỉ định trong application.properIES
    server.port = 9000 (có thể là bất kỳ giá trị nào khác)

  2. Nếu bạn đang sử dụng bộ truyền động lò xo trong dự án của mình, theo mặc định, nó trỏ đến
    8080 và nếu bạn muốn thay đổi nó, thì trong application.properies có đề cập đến
    quản lý.port = 9001 (có thể là bất kỳ giá trị nào khác)


12

Thêm cái này vào application.propertiestập tin của bạn

server.port= 8080

2
Chào mừng bạn đến với SO :-) vui lòng xem Cách trả lời
JimHawkins

Tại sao phải thêm asnwer một năm sau?!? và server.port 8080sai cú pháp cho tệp thuộc tính Java ...
Betlista

12

Trong application.propertiestệp, thêm dòng này:

server.port = 65535

nơi để đặt fie đó:

24.3 Tệp thuộc tính ứng dụng

SpringApplication tải các thuộc tính từ các tệp application.properations ở các vị trí sau và thêm chúng vào Môi trường Spring:

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

Danh sách được sắp xếp theo thứ tự ưu tiên (thuộc tính được xác định ở vị trí cao hơn trong danh sách ghi đè lên vị trí được xác định ở vị trí thấp hơn).

Trong trường hợp của tôi, tôi đặt nó trong thư mục chứa jartập tin.

Từ:

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


12

Theo mặc định, ứng dụng khởi động mùa xuân bắt đầu với máy chủ tomcat nhúng bắt đầu ở cổng mặc định 8080. mùa xuân cung cấp cho bạn các tùy chỉnh khác nhau, bạn có thể chọn một trong số chúng.

LƯU Ý - bạn có thể sử dụng server.port = 0 boot mùa xuân sẽ tìm thấy bất kỳ cổng ngẫu nhiên http chưa được gán nào cho chúng tôi.

1) ứng dụng.

server.port=2020

2) application.yml

server:  
     port : 2020

3) Thay đổi cổng máy chủ theo chương trình

3.1) Bằng cách triển khai giao diện 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) Bằng cách triển khai giao diện EmbeddedServletContainerCustomizer - Spring 1.x

@Component
public class CustomizationBean implements EmbeddedServletContainerCustomizer {

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

4) Bằng cách sử dụng tùy chọn dòng lệnh

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

10

Thật vậy, cách dễ nhất là đặt thuộc tính server.port .

Nếu bạn đang sử dụng STS làm IDE, từ phiên bản 3.6.7, bạn thực sự có Spring Properties Editor để mở tệp thuộc tính.

Trình chỉnh sửa này cung cấp tự động hoàn tất cho tất cả các thuộc tính Spring Boot. Nếu bạn viết cổng và nhấn CTRL + SPACE, server.port sẽ là tùy chọn đầu tiên.


1
Hoặc Ngoài ra nếu bạn đang sử dụng Intellij IDEA, tính năng tự động hoàn tất cũng hoạt động. ;)
May mắn

9

Sử dụng property server.port = 8080 chẳng hạn như được đề cập trong các câu trả lời khác chắc chắn là một cách để đi. Chỉ muốn đề cập rằng bạn cũng có thể phơi bày một tài sản môi trường:

SERVER_PORT=8080

Vì khởi động mùa xuân có thể thay thế "." cho "_" và hạ xuống trường hợp UPPER cho các biến môi trường trong các phiên bản gần đây. Điều này đặc biệt hữu ích trong các thùng chứa mà tất cả những gì bạn phải làm là xác định biến môi trường đó mà không cần thêm / chỉnh sửa application.propertieshoặc chuyển các thuộc tính hệ thống thông qua dòng lệnh (tức là -Dserver.port=$PORT)


SERVER_PORT=8081 mvn spring-boot:run
tộc

8

Hy vọng điều này giúp

application.properies => 

máy chủ.port = 8090

application.yml => 

người phục vụ
  cảng: 8090

application.yml => máy chủ: port: 8090
geek

8

Cung cấp số cổng trong tệp application.properations sẽ giải quyết vấn đề

 server.port = 8080

"cổng phụ thuộc vào lựa chọn của bạn, nơi bạn muốn lưu trữ ứng dụng"


7

Bạn có thể thêm cổng theo các phương thức dưới đây.

  1. Chạy -> phần Cấu hình

  2. trong application.xmladdserver.port=XXXX


1
Ý của bạn là application.ymlvà IDE bạn đang sử dụng cái gì? Hãy cụ thể.
May mắn

7

Bạn có thể đặt nó trong application.properations dưới / src / main / resource /

server.port = 8090

7

Chỉ cần có một application.propertiestrong src/main/resourcescác dự án và đưa ra có

server.port=****

trong đó ****đề cập đến số cổng.


7

1.1 Cập nhật thông qua tập tin thuộc tính.

/ src/main/resource/application.properies

máy chủ.port = 8888

Cập nhật thông qua một tập tin yaml.

   server:

     port: 8888

EmbeddedServletContainerCustomizer

@Component
public class CustomContainer implements EmbeddedServletContainerCustomizer {

    @Override
    public void customize(ConfigurableEmbeddedServletContainer container) {

        container.setPort(8888);

    }

}

6

Bạn cũng có thể sử dụng SERVER_PORTbiến môi trường để cấu hình cổng Spring Boot. Chỉ cần đặt biến môi trường và khởi động lại ứng dụng:

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

Xin lưu ý rằng nếu bạn không đặt các hệ thống biến môi trường đó rộng, bạn nên chạy ứng dụng khởi động trên cùng một phiên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.