Helidon SE provides a web server using Java virtual threads.
When we configure the web server we can specify a specific port number the server will listen on for incoming request.
If we want to use a random port number we must specify the value 0
.
Helidon will then start the web server on a random port number that is available on our machine.
The following example shows how to start a web server on a random port number. We use Helidon SE to write our code:
package mrhaki.helidon; import io.helidon.logging.common.LogConfig; import io.helidon.webserver.WebServer; public class Application { public static void main(String[] args) { // Load logging configuration. LogConfig.configureRuntime(); // Configure web server on a random port number. WebServer server = WebServer.builder() .port(0) // Use random port number .build() .start(); // Print port number the server is listening on. System.out.println("WEB server is up at http://localhost:" + server.port()); } }
When we start our application we see the following output:
2024.10.11 17:27:36.005 Logging at runtime configured using classpath: /logging.properties 2024.10.11 17:27:36.606 Helidon SE 4.1.2 features: [Config, Encoding, Media, WebServer] 2024.10.11 17:27:36.621 [0x2326f965] http://0.0.0.0:61685 bound for socket '@default' 2024.10.11 17:27:36.639 Started all channels in 28 milliseconds. 863 milliseconds since JVM startup. Java 21.0.4+7-LTS WEB server is up at http://localhost:61685
The next time we start our application we see a different port number:
2024.10.11 17:28:11.283 Logging at runtime configured using classpath: /logging.properties 2024.10.11 17:28:11.852 Helidon SE 4.1.2 features: [Config, Encoding, Media, WebServer] 2024.10.11 17:28:11.873 [0x28b386dd] http://0.0.0.0:61698 bound for socket '@default' 2024.10.11 17:28:11.892 Started all channels in 41 milliseconds. 835 milliseconds since JVM startup. Java 21.0.4+7-LTS WEB server is up at http://localhost:61698
We can also use the Helidon Configuration API to configure the web server to use a random port number.
We can for example set the port number to 0
in the application.yaml
file.
In the following example we initialize standard configuration and use it configure the webserver:
package mrhaki.helidon; import io.helidon.config.Config; import io.helidon.logging.common.LogConfig; import io.helidon.webserver.WebServer; public class Application { public static void main(String[] args) { // Load logging configuration. LogConfig.configureRuntime(); // Initialize the configuration. Config config = Config.create(); Config.global(config); // Configure web server on a random port number. WebServer server = WebServer.builder() .config(config.get("server")) // Get port number from configuration. .build() .start(); // Print port number the server is listening on. System.out.println("WEB server is up at http://localhost:" + server.port()); } }
With our new configuration we can use an environment variable SERVER_PORT
to set the port number to 0
for our web server.
The configuration could also be defined in an application.yaml
file:
server: port: 0
Written with Helidon SE 4.2.1.