Cara mengkonfigurasi port untuk aplikasi Spring Boot

798

Bagaimana cara mengkonfigurasi port TCP / IP yang didengarkan oleh aplikasi Spring Boot, sehingga tidak menggunakan port default 8080.

Paul Verest
sumber
5
Jika seseorang tertarik, berikut ini ditunjukkan cara memiliki beberapa port - stackoverflow.com/questions/36357135/…
Betlista
jika Anda menggunakan file "yml" untuk konfigurasi maka Anda dapat menggunakan server ini: port: 8081 Juga memberi catatan Anda kelas utama sebagai "@SpringBootApplication" dan menghapus @ EnableAutoConfiguration
Keaz
proyek Anda [application.properties] untuk menambahkan server.port = 8080
Lahiru Samishka
atur server.port=8080properti aplikasi. konfigurasi ini ada di ServerProperties.classkelas bawah org.springframework.boot.autoconfigure.web.
Atif

Jawaban:

1227

Seperti dikatakan dalam docs baik ditetapkan server.portsebagai properti sistem menggunakan opsi baris perintah untuk JVM -Dserver.port=8090atau menambahkan application.propertiesdi /src/main/resources/dengan

server.port=8090

Untuk penggunaan port acak

server.port=0
Paul Verest
sumber
47
Ketika port acak digunakan, info port bisa didapat dengan@Value("${local.server.port}")
azizunsal
42
Sebenarnya opsi baris perintah adalah --server.port = 8090 tidak -Dserver.port = 8090. docs.spring.io/spring-boot/docs/current/reference/html/…
Opster ES Ninja - Alper
1
Sebagai pujian untuk jawaban ini: Menurut dokumen musim semi ada jalan lain yang dapat Anda tempuh application.properties. Dalam kasus saya itu banyak membantu.
sargas
14
-Dserver.port = XXXX tidak bekerja untuk saya. Saya menggunakan mode variabel lingkungan OS: $ SERVER_PORT=8090 java -jar <path/to/my/jar>
Soumya Kanti
10
Keduanya (1) java -Dserver.port=XXXX -jar <path/to/my/jar>dan (2) java -jar <path/to/my/jar> --server.port=YYYYberfungsi. Perintah pertama mendefinisikan server.portproperti sistem, dan perintah kedua melewati properti melalui argumen baris perintah ( String... argsdalam mainmetode). Selain itu, jika Anda menggunakan java -Dserver.port=XXXX -jar <path/to/my/jar> --server.port=YYYY, YYYYlebih diutamakan XXXX, inilah mengapa Spring Boot Externalized Configuration sangat menawan.
tan9
210

Ada dua cara utama untuk mengubah port pada Embedded Tomcat di Spring Boot Application.

Ubah properti application.prop

Pertama, Anda dapat mencoba file application.properties di folder / resources:

server.port = 8090

file application.properties

Ubah opsi VM

Cara kedua, jika Anda ingin menghindari memodifikasi file apa pun dan memeriksa sesuatu yang hanya Anda perlukan di lokal Anda, Anda dapat menggunakan vm arg:

Pergi ke Jalankan -> Edit Konfigurasi -> opsi VM

-Dserver.port=8090

Ubah port dengan argumen vm

Selain itu, jika Anda memerlukan informasi lebih lanjut, Anda dapat melihat posting blog berikut di sini: Mengubah port pada Aplikasi Boot Musim Semi

anataliocs
sumber
Di STS 4 sedang dijalankan -> jalankan konfigurasi -> utama, lalu gulir ke bawah ke Tabel dengan Nama Parameter dan Nilai
serv-inc
155

Karena Spring Boot menyediakan berbagai mekanisme eksternalisasi konfigurasi (melalui berbagai PropertySourceimplementasi dan / atau prosesor yang terhubung ke Environmentobjek secara berurutan), Anda dapat mengatur properti apa pun di luar arsip jar Anda melalui metode berikut:

  1. Lewati properti melalui argumen baris perintah sebagai argumen aplikasi

    java -jar <path/to/my/jar> --server.port=7788
  2. Dari properti di SPRING_APPLICATION_JSON(Spring Boot 1.3.0+)

    • Tentukan variabel lingkungan di shell U * IX:

      SPRING_APPLICATION_JSON='{"server.port":7788}' java -jar <path/to/my/jar>
    • Dengan menggunakan properti sistem Java:

      java -Dspring.application.json='{"server.port":7788}' -jar <path/to/my/jar>
    • Lewati argumen baris perintah:

      java -jar <path/to/my/jar> --spring.application.json='{"server.port":7788}'
  3. Definisikan properti sistem JVM

    java -Dserver.port=7788 -jar <path/to/my/jar>
  4. Tentukan variabel lingkungan OS

    • U * IX Shell

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

      SET SERVER_PORT=7788
      java -jar <path/to/my/jar>
      
  5. Tempatkan properti dalam ./config/application.properties file konfigurasi

    server.port=7788

    dan lari:

     java -jar <path/to/my/jar>
  6. Tempatkan properti di ./config/application.yaml

    server:
        port: 7788
    

    dan lari:

     java -jar <path/to/my/jar>
  7. Tempatkan properti di ./application.properties

    server.port=7788

    dan lari:

     java -jar <path/to/my/jar>
  8. Tempatkan properti di ./application.yaml

    server:
        port: 7788
    

    dan lari:

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

Anda dapat menggabungkan metode di atas secara bersamaan, dan konfigurasi sebelumnya dalam daftar diutamakan daripada yang terakhir.

Sebagai contoh:

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

Server akan memulai dan mendengarkan pada port 7788.

Ini sangat berguna memberikan properti default di PropertySources dengan prioritas lebih rendah (dan biasanya dikemas dalam arsip atau dikodekan dalam sumber), dan kemudian menimpanya di lingkungan runtime. Dan itu adalah filosofi desain Spring Boot:

Dianggap keluar dari kotak, tetapi keluar dari jalan dengan cepat karena persyaratan mulai menyimpang dari standar.


SERVER_NAMEuntuk server.namekonversi dilakukan oleh Relaxed Binding .

tan9
sumber
108

Anda juga dapat mengkonfigurasi port secara terprogram

@Configuration
public class ServletConfig {
    @Bean
    public EmbeddedServletContainerCustomizer containerCustomizer() {
        return (container -> {
            container.setPort(8012);
        });
    }
}
makerj
sumber
Ini berfungsi dan sangat berguna, ketika Anda memiliki port di file konfigurasi Anda sendiri dan ingin mengaturnya saat runtime.
Xdg
4
Ini sangat membantu ketika saya perlu menyebarkan aplikasi ke layanan AWS Elastic Beanstalk, untuk mendapatkan port dari variabel lingkungan.
Martin Hansen
Ini sangat berguna ketika semua yang Anda inginkan adalah unit mandiri atau tes integrasi, +1.
Priidu Neemre
Sangat berguna ketika variabel env untuk port sudah didefinisikan dengan nama yang berbeda.
higuaro
2
Bukankah itu @Configurationbukan @Controller? Harap perbarui jika demikian.
Lucky
82

Anda dapat mengatur port dalam kode java:

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

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

Atau di application.yml:

server:
    port: 9999

Atau di application.properties:

server.port=9999

Atau sebagai parameter baris perintah:

-Dserver.port=9999
ayurchuk
sumber
Menggunakan HashMap hanya akan berfungsi jika tidak ada port yang diatur di application.properties atau .yml.
Milgo
79

Jika Anda ingin menjalankannya secara lokal, gunakan ini -

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

Pada Spring Boot 2.0 , inilah perintah yang berfungsi (petunjuk ada di sini ):

mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=8085
itwarilal
sumber
1
Mulai dari Spring Boot 2, sebaiknya Anda gunakan spring-boot.run.jvmArguments.
mapm
54

Jika Anda menggunakan application.ymltambahkan baris berikut untuk itu

server:
     port: 9000

dan tentu saja 0 untuk port acak.

gatolgaj
sumber
1
ini sepertinya tidak berhasil. Saya menggunakan server.port di application.yml dan berhasil
yathirigan
47

Seperti dijelaskan dalam dokumentasi Spring , ada beberapa cara untuk melakukan itu:

Entah Anda mengatur port di baris perintah (misalnya 8888)

-Dserver.port=8888 atau --server.port=8888

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

Atau Anda mengatur port di application.properties

server.port=${port:4588}

atau (dalam application.yml dengan sintaks yaml)

server:
   port: ${port:4588}

Jika port dilewati oleh -Dport (atau -Dserver.port) diatur dalam command line maka port ini akan diperhitungkan. Jika tidak, maka port akan menjadi 4.588 secara default.

Jika Anda ingin menegakkan port di file properti apa pun variabel lingkungan, Anda hanya perlu menulis:

server.port=8888
OlivierTerrien
sumber
39

Sertakan properti di bawah ini di application.properties

server.port=8080
Chandramouli
sumber
23

Saat Anda membutuhkan cara pemrograman untuk melakukannya, Anda dapat mengaturnya saat startup:

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

Ini mungkin membantu untuk hal-hal seperti port yang bergantung pada lingkungan. Semoga harimu menyenangkan

Luis Mauricio
sumber
2
System.setProperty("server.port", 80);adalah cara lain untuk mencapai hal yang sama.
HD1
@ hd1, saya menambahkan jawaban kami ke jawaban utama, periksa dan modifikasi sesuai keinginan Anda
Luis Mauricio
18

Anda dapat menentukan port dengan mengganti EmbeddedServletContainerFactorybean di dalam konfigurasi Anda (berbasis java atau xml). Di sana Anda dapat menentukan port untuk wadah servlet tertanam bekas. Silakan, lihat paragraf Pegas Boot - Inti "Embedded Servlet Container" dan contoh di sana. Semoga ini membantu.

nndru
sumber
Berikut tautan saat ini ke bagian program override: docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/…
jocull
18

Ada application.propertiesfile dalam sumber daya:

server.port=8082
Amit Gujarathi
sumber
17

Untuk memperluas jawaban lain:

Ada bagian dalam dokumen untuk pengujian yang menjelaskan cara mengkonfigurasi port pada tes integrasi:


Pada pengujian integrasi, konfigurasi port dibuat menggunakan anotasi @SpringBootTestdan webEnvironmentnilai - nilai.


Port acak:

@SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT)

Anda bisa menyuntikkan nilai menggunakan @LocalServerPortyang sama dengan @Value("${local.server.port}").

  • Contoh:

Konfigurasi tes port acak:

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

Port yang ditentukan:

@SpringBootTest(webEnvironment=WebEnvironment.DEFINED_PORT)

Dibutuhkan nilai dari server.portjika didefinisikan.

  • Jika didefinisikan menggunakan @TestPropertySource(properties = "server.port=9192"), itu mengesampingkan nilai yang didefinisikan lainnya.
  • Jika tidak, ini mengambil nilai dari src/test/resources/application.properties(jika ada).
  • Dan akhirnya, jika tidak didefinisikan dimulai dengan default 8080.

Contoh:

Konfigurasi tes port yang ditentukan:

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

    @Test
    public void contextLoads() {
    }

}
Pau
sumber
17

Saat aplikasi boot spring dimulai, server tertanam seperti Tomcat memulai dengan port default. Kucing jantan tertanam mulai dengan port 8080 sebagai default. Ada banyak cara untuk mengubah port server default.

Menggunakan File Properti (.properties / .yml)

Untuk mengubah port server menggunakan file properti, kita perlu mengkonfigurasi properti server.port .

Sebuah. Menggunakan application.properties di classpath seperti src \ main \ resources \ application.properties

server.port = 8585

Server akan mulai dengan port 8585. Untuk mendapatkan port server acak, tetapkan 0 ke properti.

server.port = 0

Sekarang spring boot akan memulai server pada port yang saat ini tidak digunakan oleh server mana pun dalam sistem.

b. Menggunakan application.yml di classpath seperti src \ main \ resources \ application.yml.

server:
  port: 8585 

Server akan mulai dengan port 8585.

Untuk port acak, tetapkan 0.

server:
  port: 0 

Menggunakan Perintah java dengan --server.port atau -Dserver.port

Misalkan kita memiliki JAR yang dapat dieksekusi bernama my-app.jar, lalu ketika memulai aplikasi boot semi menggunakan perintah java kita dapat menggunakan argumen sebagai berikut.

Menggunakan --server.port

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

Menggunakan -Dserver.port

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

Server akan mulai dengan port 8585.

Menggunakan Perintah java dengan --port atau -Dport di Short

Untuk membuat --server.port dan -Dserver.port singkatnya, kita dapat menghapus kata kunci server dan menjadikannya kata kunci pendek seperti --port dan -Dport. Kami dapat menggunakan kata kunci singkat apa saja. Di sini kita menggunakan port sebagai kata kunci pendek. Untuk mencapainya kita perlu mengkonfigurasi placeholder dalam file properti sebagai berikut.

Menggunakan application.properties

server.port=${port:8282}

Menggunakan application.yml

server:
   port: ${port:8282}

Jika kita tidak melewatkan port sebagai argumen maka dengan server default akan mulai dengan 8282. Jika kita menginginkan port yang berbeda, maka kita perlu melewati port yang diinginkan dalam argumen sebagai berikut. Misalkan kita memiliki JAR yang dapat dieksekusi bernama my-app.jar.

Menggunakan --port

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

Menggunakan -Dport

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

Server akan mulai dengan port 8585.

Menggunakan SERVER_PORT dengan SpringApplication secara terprogram

SpringApplication memiliki metode sebagai setDefaultProperties () yang digunakan untuk mengubah properti default booting musim semi. Misalkan kita ingin mengubah port default maka kita perlu membuat Peta dan meletakkan port dengan kunci SERVER_PORT. Temukan contohnya.

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 akan memulai server dengan port 8585.

Humoyun Ahmad
sumber
17

Ada tiga cara untuk melakukannya tergantung pada file konfigurasi aplikasi yang Anda gunakan

a) Jika Anda menggunakan kumpulan file application.properties

server.port = 8090

b) Jika Anda menggunakan file application.yml set properti port server dalam format YAML seperti yang diberikan di bawah ini

server:
     port: 8090

c) Anda juga dapat mengatur properti sebagai properti Sistem dalam metode utama

System.setProperty("server.port","8090");
Praneeth
sumber
15

jika Anda menggunakan gradle sebagai alat bangun, Anda dapat mengatur port server di file application.yml Anda sebagai:

server:
  port: 8291

Jika Anda menggunakan maven maka port dapat diatur dalam file application.properties Anda sebagai:

server.port: 8291
VSharma
sumber
untuk application.properties-nyaserver.port = 8291
iQuestProgrammer
13
  1. Seperti yang dikatakan semua orang, Anda dapat menentukan di application.properties
    server.port = 9000 (bisa berupa nilai lain)

  2. Jika Anda menggunakan aktuator pegas di proyek Anda, secara default itu menunjuk ke
    8080, dan jika Anda ingin mengubahnya, maka di application.properties menyebutkan
    management.port = 9001 (bisa berupa nilai lain)

Rakesh
sumber
12

Tambahkan ini di application.propertiesfile Anda

server.port= 8080
Sridhar Battala
sumber
2
Selamat datang di SO :-) silakan lihat How to Answer
JimHawkins
Mengapa menambahkan asnwer yang sama satu tahun kemudian?!? dan server.port 8080sintaks yang salah untuk file properti Java ...
Betlista
12

Di application.propertiesfile, tambahkan baris ini:

server.port = 65535

tempat untuk meletakkan fie itu:

24.3 File Properti Aplikasi

SpringApplication memuat properti dari file application.properties di lokasi berikut dan menambahkannya ke Lingkungan Spring:

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

Daftar ini disusun berdasarkan prioritas (properti yang ditentukan di lokasi yang lebih tinggi dalam daftar menimpa yang ditentukan di lokasi yang lebih rendah).

Dalam kasus saya, saya meletakkannya di direktori tempat jarfile itu berada.

Dari:

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

ZhaoGang
sumber
12

Secara default pegas boot aplikasi mulai dengan server tomcat tertanam mulai pada port default 8080. pegas memberi Anda berikut kustomisasi yang berbeda Anda dapat memilih salah satu dari mereka.

CATATAN - Anda dapat menggunakan server.port = 0 booting pegas akan menemukan port acak http yang belum ditetapkan untuk kami.

1) application.properties

server.port=2020

2) application.yml

server:  
     port : 2020

3) Ubah port server secara programatik

3.1) Dengan mengimplementasikan antarmuka 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) Dengan Menerapkan antarmuka EmbeddedServletContainerCustomizer - Spring 1.x

@Component
public class CustomizationBean implements EmbeddedServletContainerCustomizer {

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

4) Dengan menggunakan opsi baris perintah

 java -jar spring-boot-app.jar -Dserver.port=2020
anandchaugule
sumber
10

Memang, cara termudah adalah mengatur properti server.port .

Jika Anda menggunakan STS sebagai IDE, dari versi 3.6.7 Anda sebenarnya memiliki Spring Properties Editor untuk membuka file properti.

Editor ini menyediakan pelengkapan otomatis untuk semua properti Spring Boot. Jika Anda menulis port dan menekan CTRL + SPACE, server.port akan menjadi opsi pertama.

Adrian Cosma
sumber
1
Atau Juga jika Anda menggunakan Intellij IDEA autocomplete juga berfungsi. ;)
Lucky
9

Menggunakan properti server.port = 8080 misalnya seperti yang disebutkan dalam jawaban lain pasti cara untuk pergi. Hanya ingin menyebutkan bahwa Anda juga dapat mengekspos properti lingkungan:

SERVER_PORT=8080

Sejak spring boot dapat menggantikan "." untuk "_" dan lebih rendah ke case UPPER untuk variabel lingkungan di versi terbaru. Ini khusus berguna dalam wadah di mana yang harus Anda lakukan adalah mendefinisikan variabel lingkungan tanpa menambahkan / mengedit application.propertiesatau meneruskan properti sistem melalui baris perintah (yaitu -Dserver.port=$PORT)

Ulises
sumber
SERVER_PORT=8081 mvn spring-boot:run
nobar
8

Semoga ini bisa membantu

application.properties => 

server.port = 8090

application.yml => 

server
  port: 8090
Sagar Mal Shankhala
sumber
application.yml => server: port: 8090
geek
8

Memberikan nomor port di file application.properties akan menyelesaikan masalah

 server.port = 8080

"Port tergantung pada pilihan Anda, di mana Anda ingin meng-host aplikasi"

Ashwini
sumber
7

Anda dapat menambahkan port dengan metode di bawah ini.

  1. Jalankan -> bagian Konfigurasi

  2. Di application.xmltambahkanserver.port=XXXX

gkarthik
sumber
1
Apakah maksud Anda application.ymldan IDE apa yang Anda gunakan? Harap spesifik.
Lucky
7

Anda dapat mengaturnya di application.properties di bawah / src / main / resources /

server.port = 8090
Abhijeet
sumber
7

Hanya memiliki application.propertiesdi src/main/resourcesproyek dan memberikan ada

server.port=****

di mana ****mengacu pada nomor port.

Shubham Khurana
sumber
7

1.1 Perbarui melalui file properti.

/src/main/resources/application.properties

server.port = 8888

Perbarui melalui file yaml.

   server:

     port: 8888

EmbeddedServletContainerCustomizer

@Component
public class CustomContainer implements EmbeddedServletContainerCustomizer {

    @Override
    public void customize(ConfigurableEmbeddedServletContainer container) {

        container.setPort(8888);

    }

}
Buddhika Lakshan
sumber
6

Anda juga bisa menggunakan SERVER_PORT variabel lingkungan untuk mengonfigurasi port Boot Spring. Cukup atur variabel lingkungan dan mulai ulang aplikasi:

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

Harap dicatat bahwa jika Anda tidak mengatur sistem variabel lingkungan yang luas, Anda harus menjalankan aplikasi boot pada sesi yang sama.

Ali Dehghani
sumber