Search code examples
javaconfig12factor

12 factor app config and Java


I was reading the 12 factor app manifesto http://12factor.net/. The manifesto recommends storing the configuration data for the application in Enviornment variables. Does this mean that properties like the DB username / password, resource URL should be stored as a part of Java Env variables rather than as property files ? Is this a secure way of storing the information ? To me this seems to be a pretty clunky way of storing the information. Are there any best practices / experiences around this that can be shared ?

One option that I can think of is to have a separate configuration service running in the landscape, and use Env property to connect to the config service and then query the config service for further detailed configuration data.


Solution

  • 12 factor apps are designed to run on platforms that orchestrate isolated UNIX processes. UNIX processes are configured via environment variables. While property files are a well-established Java convention, UNIX processes are a language-agnostic way to configure processes.

    To support multiple configuration methods, a good best practice is to:

    • Read from process environment with System.getenv('CONFIG'), if null
    • Read from property file with properties.getProperty('CONFIG'), if null
    • Fall back to a default value

    For more details, see Heroku's instructions on defining config vars for Java apps.