Dmitry Tverdokhleb , Scala / Java Developer
Managing application configurations for the Play Framework projects isn’t really straightforward. When you start a new
project with Play, you typically have only one
application.conf file with global settings. But then you need to
configure the project for different environments, and you begin to create
application.demo.conf, and other
*.conf files by copying the global settings from
application.conf to those files and changing necessary options for different environments.
The described approach, however, leads to a couple of problems:
- You repeat the same configurations in many files, which defies the Don't Repeat Yourself principle.
- You may forget to change an important global setting in some of the configuration files.
The second problem can be especially annoying when you want to run a quick demo, but you didn't update the configurations for the demo environment, and the application starts working incorrectly or even can’t run due to errors.
We’re going to review a simple way to avoid such situations and to efficiently manage the configurations for your Play Framework projects.
Breaking App Configurations into Smaller Configs
Let’s have a look at a typical
application.conf file you start with when developing a new project based on Play
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
To break the
application.conf into separate files that will contain only specific settings, you can copy-paste the
Slick configurations to
conf/default/slick.conf, GitLab configs to
conf/default/gitlab.conf, and so on, and then
import these configurations into
For example, the
play.modules.conf file under
conf/default/ will look like this:
1 2 3 4
conf/ directory will have the following structure:
1 2 3 4 5 6
application.conf file will only need to import the concrete configurations from the
default/ directory using
1 2 3 4 5
Creating Development Configuration
You can set up the development environment with the same approach as we described in the previous section.
First, you need to create the
application.dev.conf file that will be importing configurations for the development
Next, you need to create the
conf/dev/ directory next to
conf/default/ and save files with the development settings:
Finally, include these files into
1 2 3 4 5 6
Notice that the
application.dev.conf file first imports the default application configurations from
and only after that does it import the specific settings from
dev/. Also note that the development configs are
included last and, therefore, they overwrite the default settings.
After all the arrangements, the
conf/ directory structure looks like this:
1 2 3 4 5 6 7 8 9 10
Now, to run your project with a specific configuration, just pass an argument — the name of the configuration file
— to the
This modular-ish DRY approach that we described will allow you to easily manage and scale settings for development, test, production, and other environments for your Play Framework-based applications.