User preferences in Java EE application

One approach we use is:

  • all non-mandatory properties have defaults in code
  • deliver a properties file with the web application in which we define the technical oriented properties
  • query a SQL table on application startup to load mainly functional oriented properties

The properties from the database have a higher priority than those from the included property file. If your requirement is to prevent functional managers from changing techical properties you can add a context column to the properties table which is checked in the management UI.

All the application code gets to see is one globally used properties collection.