Helidon SE Helpings: Starting Web Server On A Random Port
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.