Как настроить порт для приложения Spring Boot

798

Как настроить порт TCP / IP, прослушиваемый приложением Spring Boot, чтобы он не использовал порт по умолчанию 8080.

Пол Верест
источник
5
Если кому-то интересно, здесь показано, как иметь несколько портов - stackoverflow.com/questions/36357135/…
Betlista
если вы используете файл «YML» для конфигурации , то вы можете использовать этот сервер: порт: 8081 Также аннотировать вам основной класс как «@SpringBootApplication» и удалить @ EnableAutoConfiguration
Keaz
ваш проект [application.properties] для добавления server.port = 8080
Лахиру Самишка
установить server.port=8080в свойствах приложения. эта конфигурация находится в ServerProperties.classклассе под org.springframework.boot.autoconfigure.web.
Atif

Ответы:

1227

Как сказано в документации либо установленной server.portв системе собственности с помощью опции командной строки для виртуальной машины Java -Dserver.port=8090или добавить application.propertiesв /src/main/resources/с

server.port=8090

Для случайного использования порта

server.port=0
Пол Верест
источник
47
Когда используется случайный порт, информация о порте может быть @Value("${local.server.port}")
получена
42
На самом деле параметр командной строки --server.port = 8090, а не -Dserver.port = 8090. docs.spring.io/spring-boot/docs/current/reference/html/…
Opster ES Ninja - Alper
1
В качестве комплимента к этому ответу: Согласно весенним документам, есть и другие пути, по которым вы можете идти application.properties. В моем случае это очень помогло.
Саргас
14
-Dserver.port = XXXX не работает для меня. Я использовал режим переменной среды ОС: $ 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... argsв mainметоде). Более того, если вы работаете с java -Dserver.port=XXXX -jar <path/to/my/jar> --server.port=YYYY, YYYYимеет приоритет над XXXXэтим, вот почему Spring Boot Externalized Configuration так очаровательна.
tan9
210

Существует два основных способа изменить порт во встроенном Tomcat в приложении Spring Boot.

Изменить application.properties

Сначала вы можете попробовать файл application.properties в папке / resources:

server.port = 8090

файл application.properties

Изменить вариант виртуальной машины

Во-вторых, если вы хотите избежать изменения каких-либо файлов и проверки того, что вам нужно только на локальном компьютере, вы можете использовать vm arg:

Перейдите в «Выполнить» -> «Редактировать конфигурации» -> «Параметры виртуальной машины».

-Dserver.port=8090

Сменить порт с помощью vm arg

Кроме того, если вам нужна дополнительная информация, вы можете просмотреть следующее сообщение в блоге здесь: Изменение порта в приложении Spring Boot

anataliocs
источник
В STS 4 он работает -> конфигурации запуска -> основной, затем прокрутите вниз до Таблицы с именем и значением параметра
serv-inc
155

Поскольку Spring Boot предоставляет различный механизм экстернализации конфигурации (с помощью различных PropertySourceреализаций и / или процессоров, соединенных в Environmentобъект по порядку), вы можете установить любое свойство за пределами вашего архива jar следующими способами:

  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. Определить переменную среды ОС

    • U * IX Shell

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

      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_NAMEчтобы server.nameпреобразование было сделано Relaxed Binding .

tan9
источник
108

также вы можете настроить порт программно

@Configuration
public class ServletConfig {
    @Bean
    public EmbeddedServletContainerCustomizer containerCustomizer() {
        return (container -> {
            container.setPort(8012);
        });
    }
}
makerj
источник
Это работает и очень полезно, когда у вас есть порт в вашем конфигурационном файле и вы хотите установить его во время выполнения.
Xdg
4
Это было полезно, когда мне нужно было развернуть приложение в сервисе AWS Elastic Beanstalk, чтобы получить порт из переменной среды.
Мартин Хансен
Это очень полезно, когда все, что вам нужно, это автономный модуль или интеграционный тест, +1.
Прииду Нимре
Очень полезно, когда переменная env для порта уже определена под другим именем.
Higuaro
2
Разве это не @Configurationвместо @Controller? Пожалуйста, обновите, если так.
Счастливчик
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

Или в приложении. Свойства:

server.port=9999

Или как параметр командной строки:

-Dserver.port=9999
ayurchuk
источник
Использование HashMap будет работать только в том случае, если порт не установлен в application.properties или .yml.
Милго
79

Если вы хотите запустить его локально, используйте это -

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

Начиная с Spring Boot 2.0 , вот команда, которая работает (подсказки были здесь ):

mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=8085
itwarilal
источник
1
Начиная с Spring Boot 2, вы должны использовать spring-boot.run.jvmArguments.
mapm
54

Если вы используете, application.ymlдобавьте следующие строки к нему

server:
     port: 9000

и, конечно, 0 для случайного порта.

gatolgaj
источник
1
это не похоже на работу. Я использовал server.port в application.yml, и это сработало
yathirigan
47

Как объяснено в документации Spring , есть несколько способов сделать это:

Либо вы устанавливаете порт в командной строке (например, 8888)

-Dserver.port=8888 или --server.port=8888

Пример : java -jar -Dserver.port=8888 test.jar

Или вы устанавливаете порт в приложении. Свойства

server.port=${port:4588}

или (в application.yml с синтаксисом yaml)

server:
   port: ${port:4588}

Если порт, переданный -Dport (или -Dserver.port), установлен в командной строке, то этот порт будет принят во внимание. Если нет, то порт будет 4588 по умолчанию.

Если вы хотите использовать порт в файле свойств независимо от переменной среды, вам просто нужно написать:

server.port=8888
OlivierTerrien
источник
39

Включить ниже недвижимость в application.properties

server.port=8080
Chandramouli
источник
23

Когда вам нужен программный способ сделать это, вы можете установить его во время запуска:

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

Это может помочь для таких вещей, как зависящий от среды порт. Хорошего дня

Луис Маурисио
источник
2
System.setProperty("server.port", 80);это еще один способ добиться того же.
hd1
@ hd1, я добавил наши ответы к основному ответу, проверил его и
Луис Маурисио
18

Вы можете указать порт, переопределив EmbeddedServletContainerFactorybean-компонент в своей конфигурации (на основе Java или XML). Там вы можете указать порт для используемого встроенного контейнера сервлета. Пожалуйста, посмотрите параграф Spring Boot - Core "Поддержка встроенных контейнеров сервлетов" и пример там. Надеюсь это поможет.

nndru
источник
1
Прямая ссылка: docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/…
Эрик Мартино,
Вот текущая ссылка на раздел программного переопределения: docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/…
jocull
18

В application.propertiesфайле присутствует в ресурсах:

server.port=8082
Амит Гуджаратхи
источник
17

Чтобы расширить другие ответы:

В документации есть раздел для тестирования, который объясняет, как настроить порт в интеграционных тестах:


При интеграционных тестах конфигурация порта выполняется с использованием аннотации @SpringBootTestи webEnvironmentзначений.


Случайный порт:

@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.portесли оно определено.

  • Если определяется с помощью @TestPropertySource(properties = "server.port=9192"), он переопределяет другие определенные значения.
  • Если нет, он принимает значение из src/test/resources/application.properties(если существует).
  • И, наконец, если он не определен, он начинается со значения по умолчанию 8080.

Пример:

Определена конфигурация тестирования порта:

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

    @Test
    public void contextLoads() {
    }

}
Pau
источник
17

Когда запускается приложение весенней загрузки, встроенный сервер, такой как Tomcat, запускается с портом по умолчанию. Встроенный tomcat начинается с порта 8080 по умолчанию. Есть много способов изменить порт сервера по умолчанию.

Использование файла свойств (.properties / .yml)

Чтобы изменить порт сервера с помощью файла свойств, нам нужно настроить свойство server.port .

а. Использование application.properties в classpath, например, src \ main \ resources \ application.properties

server.port = 8585

Сервер запустится с портом 8585. Чтобы получить произвольный порт сервера, присвойте 0 свойству.

server.port = 0

Теперь весенняя загрузка запустит сервер на порту, который в настоящее время не используется ни одним сервером в системе.

б. Использование application.yml в classpath, например, src \ main \ resources \ application.yml.

server:
  port: 8585 

Сервер запустится с портом 8585.

Для случайного порта назначьте 0.

server:
  port: 0 

Использование команды java с --server.port или -Dserver.port

Предположим, у нас есть исполняемый файл JAR с именем my-app.jar, а затем при запуске приложения весенней загрузки с помощью команды java мы можем использовать аргумент следующим образом.

Использование --server.port

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

Использование -Dserver.port

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

Сервер запустится с портом 8585.

Использование Java-команды с --port или -Dport вкратце

Короче говоря, --server.port и -Dserver.port мы можем удалить ключевое слово сервера и сделать его любым коротким ключевым словом, таким как --port и -Dport. Мы можем использовать любое короткое ключевое слово. Здесь мы используем порт в качестве короткого ключевого слова. Для этого нам нужно настроить заполнитель в файле свойств следующим образом.

Использование application.properties

server.port=${port:8282}

Использование application.yml

server:
   port: ${port:8282}

Если мы не передадим порт в качестве аргумента, то по умолчанию сервер начнёт с 8282. Если нам нужен другой порт, нам нужно передать желаемый порт в аргументе следующим образом. Предположим, у нас есть исполняемый файл JAR с именем my-app.jar.

Использование --port

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

Использование -Dport

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

Сервер запустится с портом 8585.

Использование SERVER_PORT с SpringApplication программно

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

Spring boot запустит сервер с портом 8585.

Хумоюн Ахмад
источник
17

Есть три способа сделать это в зависимости от используемого вами файла конфигурации приложения.

а) Если вы используете набор файлов application.properties

server.port = 8090

б) Если вы используете файл application.yml, задайте свойство порта сервера в формате YAML, как указано ниже

server:
     port: 8090

в) Вы также можете установить свойство как системное свойство в методе main.

System.setProperty("server.port","8090");
Praneeth
источник
15

если вы используете gradle в качестве инструмента для сборки, вы можете установить порт сервера в файле application.yml как:

server:
  port: 8291

Если вы используете maven, то порт может быть установлен в вашем файле application.properties как:

server.port: 8291
VSharma
источник
для application.properties егоserver.port = 8291
iQuestProgrammer
14

Есть много других вещей, которые вы можете изменить в конфигурации сервера, изменив application.properties. Как время сеанса, адрес и порт и т. Д. См. Ниже сообщение

ссылка: http://docs.spring.io/spring-boot/docs/1.4.x/reference/html/common-application-properties.html

Я использовал несколько из них, как показано ниже.

server.session.timeout=1
server.port = 3029
server.address= deepesh
Дипеш Кумар
источник
13
  1. Как все говорили, вы можете указать в application.properties
    server.port = 9000 (может быть любое другое значение)

  2. Если вы используете пружинный привод в своем проекте, по умолчанию он указывает на
    8080, и если вы хотите изменить его, то в файле application.properties укажите
    management.port = 9001 (может быть любое другое значение)

Ракеш
источник
12

Добавьте это в свой application.propertiesфайл

server.port= 8080
Шридхар Баттала
источник
2
Добро пожаловать на SO :-) пожалуйста, посмотрите как ответить
JimHawkins
Зачем добавлять такой же ответ через год?!? и server.port 8080неверный синтаксис для файла свойств Java ...
Betlista
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

ZhaoGang
источник
12

По умолчанию приложение весенней загрузки запускается со встроенного сервера tomcat, запускается с порта 8080 по умолчанию. 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
anandchaugule
источник
10

Действительно, самый простой способ - установить свойство server.port .

Если вы используете STS в качестве IDE, то начиная с версии 3.6.7 у вас есть редактор свойств Spring для открытия файла свойств.

Этот редактор предоставляет автозаполнение для всех свойств Spring Boot. Если вы напишите порт и нажмете CTRL + SPACE, server.port будет первым вариантом.

Адриан Косма
источник
1
Или также, если вы используете Intellij IDEA, автозаполнение тоже работает. ;)
Счастливчик
9

Использование свойства server.port = 8080, например, как упомянуто в других ответах, определенно является подходящим вариантом. Просто хотел упомянуть, что вы также можете выставить свойство среды:

SERVER_PORT=8080

С пружины багажник способен заменить "." для "_" и ниже в верхнем регистре для переменных среды в последних версиях. Это особенно полезно в контейнерах, где все, что вам нужно сделать, это определить эту переменную среды без добавления / редактирования application.propertiesили передачи системных свойств через командную строку (т.е. -Dserver.port=$PORT)

Ulises
источник
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

«порт зависит от вашего выбора, где вы хотите разместить приложение»

Ashwini
источник
7

Вы можете добавить порт следующими способами.

  1. Выполнить -> раздел Конфигурации

  2. В application.xmlдобавленииserver.port=XXXX

gkarthiks
источник
1
Вы имеете в виду application.ymlи какую IDE вы используете? Пожалуйста, будьте конкретны.
Счастливчик
7

Вы можете установить это в application.properties в / src / main / resources /

server.port = 8090
Abhijeet
источник
7

Просто войдите application.propertiesв src/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переменную окружения для настройки порта Spring Boot. Просто установите переменную окружения и перезапустите приложение:

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

Обратите внимание, что если вы не устанавливаете эти переменные среды в масштабе всей системы, вы должны запустить загрузочное приложение в том же сеансе.

Али Дехгани
источник