问题
How do I configure the TCP/IP port listened on by a Spring Boot application, so it does not use the default port of 8080.
回答1:
As said in docs either set server.port
as system property using command line option to jvm -Dserver.port=8090
or add application.properties
in /src/main/resources/
with
server.port=8090
For random port use
server.port=0
回答2:
There are two main ways to change the port in the Embedded Tomcat in a Spring Boot Application.
Modify application.properties
First you can try the application.properties file in the /resources folder:
server.port = 8090

Modify a VM option
The second way, if you want to avoid modifying any files and checking in something that you only need on your local, you can use a vm arg:
Go to Run -> Edit Configurations -> VM options
-Dserver.port=8090

Additionally, if you need more information you can view the following blog post here: Changing the port on a Spring Boot Application
回答3:
Since Spring Boot provides various configuration externalization mechanism (through various PropertySource
implementations and/or processors wired into Environment
object in order), you can set any property outside of your jar archive through following methods:
Pass property through command line argument as application argument
java -jar <path/to/my/jar> --server.port=7788
From property in
SPRING_APPLICATION_JSON
(Spring Boot 1.3.0+)Define environment variable in U*IX shell:
SPRING_APPLICATION_JSON='{"server.port":7788}' java -jar <path/to/my/jar>
By using Java system property:
java -Dspring.application.json='{"server.port":7788}' -jar <path/to/my/jar>
Pass through command line argument:
java -jar <path/to/my/jar> --spring.application.json='{"server.port":7788}'
Define JVM system property
java -Dserver.port=7788 -jar <path/to/my/jar>
Define OS environment variable
U*IX Shell
SERVER_PORT=7788 java -jar <path/to/my/jar>
Windows
SET SERVER_PORT=7788 java -jar <path/to/my/jar>
Place property in
./config/application.properties
configuration fileserver.port=7788
and run:
java -jar <path/to/my/jar>
Place property in
./config/application.yaml
server: port: 7788
and run:
java -jar <path/to/my/jar>
Place property in
./application.properties
server.port=7788
and run:
java -jar <path/to/my/jar>
Place property in
./application.yaml
server: port: 7788
and run:
java -jar <path/to/my/jar>
You can combine above methods all together, and the former configuration in the list take precedence over the latter one.
For example:
SERVER_PORT=2266 java -Dserver.port=5566 -jar <path/to/my/jar> --server.port=7788
The server will start and listen on port 7788.
This is very useful providing default properties in PropertySources with lower precedence (and usually packaged in the archive or coded in the source), and then override it in the runtime environment. And it is the design philosophy of Spring Boot:
Be opinionated out of the box, but get out of the way quickly as requirements start to diverge from the defaults.
SERVER_NAME
to server.name
conversion was done by Relaxed Binding.
回答4:
also, you can configure port programmatically
@Configuration
public class ServletConfig {
@Bean
public EmbeddedServletContainerCustomizer containerCustomizer() {
return (container -> {
container.setPort(8012);
});
}
}
回答5:
You can set port in java code:
HashMap<String, Object> props = new HashMap<>();
props.put("server.port", 9999);
new SpringApplicationBuilder()
.sources(SampleController.class)
.properties(props)
.run(args);
Or in application.yml:
server:
port: 9999
Or in application.properties:
server.port=9999
Or as a command line parameter:
-Dserver.port=9999
回答6:
If you would like to run it locally, use this -
mvn spring-boot:run -Drun.jvmArguments='-Dserver.port=8085'
As of Spring Boot 2.0, here's the command that works (clues were here):
mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=8085
回答7:
In case you are using application.yml
add the Following lines to it
server:
port: 9000
and of course 0 for random port.
回答8:
As explained in Spring documentation, there are several ways to do that:
Either you set the port in the command line (for example 8888)
-Dserver.port=8888
or --server.port=8888
Example : java -jar -Dserver.port=8888 test.jar
Or you set the port in the application.properties
server.port=${port:4588}
or (in application.yml with yaml syntax)
server:
port: ${port:4588}
If the port passed by -Dport (or -Dserver.port) is set in command line then this port will be taken into account. If not, then the port will be 4588 by default.
If you want to enforce the port in properties file whatever the environment variable, you just have to write:
server.port=8888
回答9:
Include below property in application.properties
server.port=8080
回答10:
When you need a programatically way of doing it, you can set it during startup:
System.getProperties().put( "server.port", 80 );
SpringApplication.run(App.class, args);
This might help for things like environment dependent port. Have a nice day
回答11:
You can specify port by overriding EmbeddedServletContainerFactory
bean within your configuration (java based or xml). There you can specify port for used embedded servlet container. Please, see Spring Boot - Core "Embedded Servlet Container Support" paragraph and example there. Hope this helps.
回答12:
In application.properties
file present in resources:
server.port=8082
回答13:
To extend other answers:
There is a section in the docs for testing which explains how to configure the port on integration tests:
- 41.3 Testing Spring Boot applications
- 41.3.3 Working with random ports
At integration tests, the port configuration is made using the annotation @SpringBootTest
and the webEnvironment
values.
Random port:
@SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT)
You can inject the value using @LocalServerPort
which is the same as @Value("${local.server.port}")
.
- Example:
Random port test configuration:
@RunWith(SpringRunner.class
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class ExampleTest {
...
@LocalServerPort //to inject port value
int port;
}
Defined port:
@SpringBootTest(webEnvironment=WebEnvironment.DEFINED_PORT)
It takes the value from server.port
if is defined.
- If is defined using
@TestPropertySource(properties = "server.port=9192")
, it overrides other defined values. - If not, it takes the value from
src/test/resources/application.properties
(if exists). - And finally, if it is not defined it starts with the default
8080
.
Example:
Defined port test configuration:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@TestPropertySource(properties = "server.port=9192")
public class DemoApplicationTests {
@Test
public void contextLoads() {
}
}
回答14:
When spring boot application starts, the embedded server such as Tomcat starts with a default port. The embedded tomcat starts with 8080 port as default. There are many ways to change default server port.
Using Property File (.properties/.yml)
To change server port using property file, we need to configure server.port property.
a. Using application.properties in classpath such as src\main\resources\application.properties
server.port = 8585
The server will start with 8585 port. To get random server port, assign 0 to the property.
server.port = 0
Now spring boot will start the server on a port that is not being used currently by any server in the system.
b. Using application.yml in classpath such as src\main\resources\application.yml.
server:
port: 8585
Server will start with 8585 port.
For random port, assign 0.
server:
port: 0
Using java Command with --server.port or -Dserver.port
Suppose we have an executable JAR named as my-app.jar, then while starting spring boot application using java command we can use the argument as follows.
Using --server.port
java -jar my-app.jar --server.port=8585
Using -Dserver.port
java -jar -Dserver.port=8585 my-app.jar
Server will start with 8585 port.
Using java Command with --port or -Dport in Short
To make --server.port and -Dserver.port in short, we can remove server keyword and make it any short keyword such as --port and -Dport. We can use any short keyword. Here we are using port as short keyword. To achieve it we need to configure placeholder in property file as follows.
Using application.properties
server.port=${port:8282}
Using application.yml
server:
port: ${port:8282}
If we do not pass the port as the argument then by default server will start with 8282. If we want a different port, then we need to pass desired port in argument as follows. Suppose we have an executable JAR named as my-app.jar.
Using --port
java -jar my-app.jar --port=8585
Using -Dport
java -jar -Dport=8585 my-app.jar
Server will start with 8585 port.
Using SERVER_PORT with SpringApplication Programmatically
SpringApplication has a method as setDefaultProperties() that is used to change spring boot default properties. Suppose we want to change default port then we need to create a Map and put a port with SERVER_PORT key. Find the example.
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 will start the server with 8585 port.
回答15:
There are three ways to do it depending on the application configuration file you are using
a) If you are using application.properties file set
server.port = 8090
b) If you are using application.yml file set server port property in YAML format as given below
server:
port: 8090
c) You can also Set the property as the System property in the main method
System.setProperty("server.port","8090");
回答16:
There are many other stuffs you can alter in server configuration by changing application.properties. Like session time out, address and port etc. Refer below post
ref: http://docs.spring.io/spring-boot/docs/1.4.x/reference/html/common-application-properties.html
I used few of them as below.
server.session.timeout=1
server.port = 3029
server.address= deepesh
回答17:
In the application.properties
file, add this line:
server.port = 65535
where to place that fie:
24.3 Application Property Files
SpringApplication loads properties from application.properties files in the following locations and adds them to the Spring Environment:
A /config subdirectory of the current directory The current directory A classpath /config package The classpath root
The list is ordered by precedence (properties defined in locations higher in the list override those defined in lower locations).
In my case I put it in the directory where the jar
file stands.
From:
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config-application-property-files
回答18:
As everyone said, you can specify in application.properties
server.port = 9000 (could be any other value)If you are using spring actuator in your project, by default it points to
8080, and if you want to change it, then in application.properties mention
management.port = 9001 (could be any other value)
回答19:
Add this in your application.properties
file
server.port= 8080
回答20:
By default spring boot app start with embedded tomcat server start at default port 8080. spring provides you with following different customization you can choose one of them.
NOTE – you can use server.port=0 spring boot will find any unassigned http random port for us.
1) application.properties
server.port=2020
2) application.yml
server:
port : 2020
3) Change the server port programatically
3.1) By implementing WebServerFactoryCustomizer interface - 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) By Implementing EmbeddedServletContainerCustomizer interface - Spring 1.x
@Component
public class CustomizationBean implements EmbeddedServletContainerCustomizer {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
// customize here
container.setPort(2020);
}
}
4) By using command line option
java -jar spring-boot-app.jar -Dserver.port=2020
回答21:
Indeed, the easiest way is to set the server.port property.
If you are using STS as IDE, from version 3.6.7 you actually have Spring Properties Editor for opening the properties file.
This editor provides autocomplete for all Spring Boot properties. If you write port and hit CTRL + SPACE, server.port will be the first option.
回答22:
Hope this one help
application.properties=> server.port=8090 application.yml=> server port:8090
回答23:
Using property server.port=8080 for instance like mentioned in other answers is definitely a way to go. Just wanted to mention that you could also expose an environment property:
SERVER_PORT=8080
Since spring boot is able to replace "." for "_" and lower to UPPER case for environment variables in recent versions.
This is specially useful in containers where all you gotta do is define that environment variable without adding/editing application.properties
or passing system properties through command line (i.e -Dserver.port=$PORT
)
回答24:
Providing the port number in application.properties file will resolve the issue
server.port = 8080
"port depends on your choice, where you want to host the application"
回答25:
Just have a application.properties
in src/main/resources
of the project and give there
server.port=****
where ****
refers to the port number.
回答26:
1.1 Update via a properties file.
/src/main/resources/application.properties
server.port=8888
Update via a yaml file.
server:
port: 8888
EmbeddedServletContainerCustomizer
@Component
public class CustomContainer implements EmbeddedServletContainerCustomizer {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
container.setPort(8888);
}
}
回答27:
You can add the port in below methods.
Run -> Configurations section
In
application.xml
addserver.port=XXXX
回答28:
You can also use SERVER_PORT
environment variable to configure Spring Boot port. Just set the environment variable and restart the app:
set SERVER_PORT=9999 // on windows machine
export SERVER_PORT=9999 // on linux
Please note that if you do not set those environment variables system wide, you should run the boot app on the same session.
回答29:
You can set that in application.properties under /src/main/resources/
server.port = 8090
回答30:
Mostly springboot runs on port:8080
because of embedded Tomcat. In some it may throw an error port 8080 already in use
. To avoid this kind of issues we can config the server port.
Using application.properties
add server.port=9898
On runtime config
run your application with below arguments.
spring-boot:run -Drun.jvmArguments='-Dserver.port=8081'
来源:https://stackoverflow.com/questions/21083170/how-to-configure-port-for-a-spring-boot-application