The developers love spring Boot because it’s out of the box defaults. But sometimes, the developers may need to change these default values. Out of these, The most common one is to change the default port number of embedded web servers in spring boot.
So let’s check out the various ways to override the default port of a spring boot applications.
1. Using Configuration files
The most common and easier way to override default configurations is via properties files. To change the port number you should use the server.port property.
For example, you can change the port number to 8081 as shown below.
server.port=8081
Code language: Properties (properties)
You can also use the same configuration in application.yml files.
server:
port: 8081
Code language: YAML (yaml)
1.1. Profile Specific port change
It is also possible to change the port based on the active spring profile.
To demonstrate this, We can create an application-qa.properties with port 9090.
server.port=9090
Code language: Properties (properties)
Also for uat, you could create another file called application-uat.properties with port 9091.
server.port=9091
Code language: Properties (properties)
By running the same application with different profiles, you can switch between different ports. With no active profiles, Spring Boot will pick the default port.
2. Using Command Line arguments
There are two ways you can pass the port number to application via command line. They are,
- Program parameters.
- JVM parameters.
2.1 Port change using spring program parameters
Application or program parameters are the ones that you pass using double dash(–) while calling JAR files.
$ java -jar hello-world.jar --server.port=8082
Be aware that the program parameters will override values in the properties files.
2.2 Port change using JVM arguments
You could also pass the settings as JVM arguments as shown below.
java -Dserver.port=8080 -jar hello-world.jar
3. Using Environment Variables
If you add a SERVER_PORT environment variable to your OS settings, Spring Boot will pick the port number from there.
For windows,
set SERVER_PORT=8081
java -jar hello-world.jar
Code language: Bash (bash)
For Linux/Mac,
export SERVER_PORT=8081
java -jar hello-world.jar
Code language: Bash (bash)
Twilio has a good article for env variables on Windows/Linux and Mac if you would like to read more.
Also note that this approach is best when used with Docker images as it is easier to pass environment variables to a docker runtime instead of external properties files.
4. Programatical approach to change the port
At the end, Spring boot needs to create the server with a given port. But if we could provide a WebServerFactoryCustomizer bean with a hard coded port number.
@Bean
WebServerFactoryCustomizer<ConfigurableWebServerFactory> getWebServerFactoryCustomizer() {
return factory -> factory.setPort(9090);
}
Code language: Java (java)
Even though this is possible, Never do this in your production code. This is because you can’t override this value without another code change. Pick any one of those approaches from the above list.
5. The order of evaluation
As we have seen different approaches here, There may be situations where you may need to club these options together. In such cases, Spring Boot will evaluate the port number in the following order. Higher on this list is preferred the most.
- Hard-Coded Value from WebServerFactoryCustomizer
- Commandline arguments
- OS environment variables
- A profile specific application.properties
- application properties
There are also minor variants to these approaches which you can find at the external configurations section of spring boot documentation.
5. Summary
To summarize, we learned 4 different ways in which we can change the server port of a spring boot application. If you liked this article please give a read on the following writeups.