Environments Namespace
Published 15 January 2025
Environments are a set of associated properties used to connect to a database.
The concept of an environment has been created to allow Flyway to work easily with several different databases or configurations from a single configuration file.
Environment settings
Setting | Required | Type | Description |
---|---|---|---|
url |
Yes | String | Database JDBC URL. |
user |
No | String | Database user name. |
password |
No | String | Database password (usually specified using a resolver). |
schemas |
No | String array | The schemas to track. |
displayName |
No | String | The name of the database, as it appears in Flyway Desktop UI. |
driver |
No | String | The jdbc driver to use to connect to the database. |
connectRetries |
No | Integer | The maximum number of retries when attempting to connect to the database. |
connectRetriesInterval |
No | Integer | The maximum time between retries when attempting to connect to the database. |
initSql |
No | String | SQL statements to be run immediately after a database connection has been established. |
provisioner |
Determines the type of provisioning to use for this database. |
Environment namespaces
Namespace | Description |
---|---|
flyway |
Flyway namespace properties to override for the environment. |
jdbcProperties |
JDBC properties to pass to the JDBC driver when establishing a connection. |
resolvers |
Additional properties relating to resolvers being used in calculating necessary connection properties. |
TOML Configuration
These parameters should be configured in an environments namespace.
[environments.example]
url = "jdbc:sqlite:local_database1.db"
username = "bob"
...
[environments.another_example]
url = "jdbc:sqlite:local_database2.db"
username = "jeff"
...
[environments.another_example]
locations = ["defaultLocation","customLocation"]
Resolvers
Usually you won't want to keep sensitive information in a plain text configuration file and so resolvers can be used to pull information into your configuration from a variety of external sources like environment variables and secrets managers.
Command line configuration
It is possible to define an environment on the commandline, for example:
./flyway info -environments.example.url=jdbc:sqlite:local_database.db -environment=example
Note: You define an environment using the
environments
(plural) namespace but you specify which environment to use with the
environment
(singular) parameter. It's a bit of a trip hazard but it has some logical purpose to it.
Legacy configuration
Properties that were originally part of the regular flyway configuration (-url
, -user
,
-password
) can still be used for backwards compatibility. Under the hood, Flyway will map these onto an environment named
default
for you and then use them like any other environment.