Skip to content

Configuration

mangoo I/O relies on a single configuration file for your application, based on SnakeYAML. The config.yaml file is located in the src/main/resources folder, along with other non-Java files. You can customize settings by adding values to config.yaml. For example:

application:
  foo: bar

mangoo I/O provides a set of default property values that configure the application. See default values for a full list of configuration options and their defaults.

Accessing Configuration Values

Configuration values are accessed using dot notation based on their hierarchy. For example:

application:
  api:
    key: foo

This value can be accessed using:

config.getString("application.api.key");

Injecting the Config Class

You can retrieve configuration values by injecting the Config class in two ways:

Member Variable Injection

@Inject
private Config config;
@Inject
private MyClass(Config config) {
    // Use config
}

You can retrieve configuration values either by specifying a key or using predefined constants from mangoo I/O:

config.getString("application.minify.js");
config.getString(Key.APPLICATION_MINIFY_JS);

Configuration Modes

mangoo I/O offers three configuration modes: dev, test, and prod.

  • Dev mode is activated automatically when starting the application using the Maven plugin:
    mvn mangooio:run
    
  • Test mode is activated during unit tests.
  • Prod mode is the default if no other mode is specified.

To manually set a mode, use:

System.setProperty("application.mode", "dev");

Or pass it as a JVM argument:

... -Dapplication.mode=dev

Mode-Specific Configuration

You can define mode-specific settings by prefixing configuration values:

default:
  application:
    name: foo
    url: http://localhost

environments:
  test:
    application:
      name: foo
      url:  https://test.mydomain.com

  prod:
    application:
      name: foo
      url:  https://mydomain.com

By default, mangoo I/O uses values from the default section, which are overridden by environment-specific values when the corresponding mode is active.

Encrypted Configuration Values

Configuration values in config.yaml can be encrypted using public/private key encryption. Encrypted values are decrypted at runtime and stored in-memory.

To use encryption, generate a key pair via the mangoo I/O administrative backend. Once generated, you can encrypt configuration values and set them in config.yaml as follows:

application:
  db:
    username: cryptex{...}
    password: cryptex{...}

The private key must be provided as a JVM argument:

... -Dapplication.privatekey=/path/to/privatekey

Note: The encryption prefix is cryptex{}, without a trailing "t", based on the Cryptex concept.

Passing JVM Arguments

JVM arguments can be used in configuration values by using the arg{} syntax:

application:
  db:
    username: arg{}

This configuration will use the corresponding JVM argument if provided:

... -Dapplication.db.username=myusername

You can also specify default values:

application:
  db:
    username: arg{defaultuser}

Default Values

This is an overview of the out-of-the box configuration options for the config.yaml and their default values, if the properties are not configured in the config.yaml file.

Key Description Default Value
application.admin.enable Activates the admin dashboard false
application.admin.password Password for the admin dashboard -
application.admin.secret Secret for the admin dashboard. If configured, enabled MFA for the admin dashboard -
application.admin.username Username for the admin dashboard -
application.admin.locale Locale for the admin dashoard en_EN
application.api.key API key for the build-in ApiKeyFilter -
application.controller Package name where the controller classes are located controllers.
application.language Language of the application en
application.name Name of the application mangooio-application
application.paseto.secret Secret for the build-in PasetoFilter -
application.secret Default application secret -
authentication.cookie.expires Activates that the cookie has a defined lifetime, otherwise the cookie is only valid for the browser session false
authentication.cookie.name Name of the authentication cookie mangooio-authentication
authentication.cookie.remember.expires Lifetime of the cookie in hours if remember me is activated 720
authentication.cookie.secret Secret for the authentication cookie -> application.secret value
authentication.cookie.secure Set the secure attribute of the authentication cookie false
authentication.cookie.token.expires Lifetime of the token and the cookie in minutes 60
authentication.lock Number of attemps after an account gets locked; Only valid if build-in authentication is used 10
authentication.redirect.login Redirect URL for the login page when build-in authentication is used -
authentication.redirect.mfa Redirect URL for the MFA page when build-in authentication is used -
authentication.origin Activates that an "?origin=" parameter with the request URL is added during authentication false
connector.ajp.host AJP host -
connector.ajp.port AJP port 0
connector.http.host HTTP host -
connector.http.port HTTP port -
cors.alloworigin Header value for Access-Control-Allow-Origin ^http(s)?://(www.)?example.(com|org)$
cors.enable Activate sending of CORS headers false
cors.headers.allowcredentials Header value for Access-Control-Allow-Credentials true
cors.headers.allowheaders Header value for Access-Control-Allow-Headers Authorization,Content-Type,Link,X-Total-Count,Range
cors.headers.allowmethods Header value for Access-Control-Allow-Methods DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT
cors.headers.exposeheaders Header value for Access-Control-Expose-Headers Accept-Ranges,Content-Length,Content-Range,ETag,Link,Server,X-Total-Count
cors.headers.maxage Header value for Access-Control-Max-Age 864000
cors.urlpattern Regex pattern on which the CORS headers should be checked against ^http(s)?://([^/]+)(:([^/]+))?(/([^/])+)?/api(/.*)?$
flash.cookie.name Name of the flash cookie mangooio-flash
flash.cookie.secret Secret for the flash cookie -> application.secret value
i18n.cookie.name Name of the i18n cookie mangooio-i18n
metrics.enable Activates collecting metrics which are shown in the admin dashboard false
persistence.enable Activates default persistence with MongoDB true
mongo.auth Activates MongoDB authentication false
mongo.authdb Name of the MongoDB AuthDB -
mongo.dbname Name of the MongoDB database mangoo-io-mongodb
mongo.embedded Activates the build-in in-memory MongoDB false
mongo.host MongoDB host localhost
mongo.password MongoDB password -
mongo.port MongoDB port 27017
mongo.username MongoDB username -
scheduler.enable Activates the build-in scheduker true
session.cookie.expires Activates that the cookie has a defined lifetime, otherwise the cookie is only valid for the browser session false
session.cookie.name Name of the seesion cookie mangooio-session
session.cookie.secret Secret of the seesion cookie -> application.secret value
session.cookie.secure Set the secure attribute of the session cookie -
session.cookie.token.expires Lifetime of the token and the cookie in minutes 60
smtp.authentication Axtivates SMTP authentication false
smtp.debug Acticates SMTP debugging false
smtp.from SMTP from address mangoo noreply@mangoo.local
smtp.host SMTP host address localhost
smtp.password SMTP password -
smtp.port SMTP port 25
smtp.protocol SMTP protocol smtps
smtp.username SMTP username -
undertow.maxentitysize Maximum size of an HTTP request entity (body) 4194304 byte