Quarkus includes the “undertow” extension which is triggered when you include a JAXRS dependency in your project. We will see in this tutorial which are the most common settings you can apply to a Quarkus application to configure the embedded Undertow server.
First of all let’s specify how you can set configuration parameters on Quarkus. You have two main options:
- Pass parameters on the Command Line using -D
- Include parameters in the the application.properties file
Configuring HTTP Port
The most basic setting is the default HTTP Port, which can be overridden as follows in the application.properties file:
quarkus.http.port=9080
On the other hand, if you want to use a different port depending on your profile, you can prefix the profile to the quarkus.http.port. For example:
quarkus.http.port=8080 %dev.quarkus.http.port=8180
Finally, you can also pass the property at startup as follows:
java -Dquarkus.http.port=8180 target/quarkus-app/quarkus-run.jar
The equivalent option is also available for the native application:
./target/acme-1.0.0-SNAPSHOT-runner -Dquarkus.http.port=8180
Configuring Host name
Next, here is how you can configure in the application.properties file the Host where the application will be bound (“Default is 0.0.0.0”):
quarkus.http.host=acme.com
Configuring HTTPS Port
In order to configure the secure port used for https connections, you can use this setting:
quarkus.http.ssl-port=8443
Configuring HTTP Test Port
Quarkus tests by default run on port 8081 to avoid conflict with the HTT Port. You can can configure the port used by tests by setting quarkus.http.test-port
as follows:
quarkus.http.test-port=8088
Configuring the Context Path
Finally, another common setting is the Context Path, which defaults to the Root Context (“/”). Here is how to set it to a custom value:
quarkus.servlet.context-path=/webcontext
Configuring CORS
Cross-origin resource sharing is a mechanism that allows some restricted resources on a web page to be requested from another domain outside the domain from which the first resource was served. In order to enable Cross-origin resource sharing you need to set the property to true, which enables it through a Servlet Filter. Then, you can fine tune the CORS policy to allow specific headers or HTTP methods to be allowed.
Here is a fully configured application.properties which allows all HTTP methods from the site acme.com:
quarkus.http.cors=true quarkus.http.cors.origins=http://foo.com,http://www.acme.com quarkus.http.cors.methods=GET,PUT,POST,DELETE quarkus.http.cors.headers=X-Custom quarkus.http.cors.exposed-headers=Content-Disposition
Configuring IO Threads
The number if IO threads used to perform IO in Quarkus will be automatically set to a reasonable value based on the number of CPU cores. You can configure it using the following property:
quarkus.http.io-threads=5
Configuring HTTPS with Quarkus
You can configure secure connections for Web applications either with a PEM certificate or using a Keystore. Let’s see how to configure a keystore. First generate a self-signed keystore:
keytool -genkey -keyalg RSA -alias demo -keystore keystore.jks -storepass mypassword -validity 365 -keysize 2048
Then, provide in your configuration file a reference to the keystore and its password:
quarkus.http.ssl.certificate.key-store-file=/path/to/keystore.jks quarkus.http.ssl.certificate.key-store-password=mypassword
quarkus.http.ssl.certificate.key-store-file=/path/to/keystore.jks quarkus.http.ssl.certificate.key-store-password=mypassword
In order to configure the secure port used for https connections, you can use this setting:
quarkus.http.ssl-port=8443