Validating Grails Configurations
When externalizing grails app configurations for multiple environments I want to ensure values are provided for all the required/expected properties. So I wrote a plugin to help.
Validating Expected and Required Properties
Simply add something like this to Config.groovy
validate { required = [ "a", "b", "c" ] expected = [ "p":123, "d":"foobar", "q":"/dev/null" ] }
Then (usually in BootStrap.groovy
) to set defaults for missing expected properties call
grailsApplication.config.validateExpectedProperties()
To check for required properties call
grailsApplication.config.validateRequiredProperties()
A ConfigurationException
will be thrown when required properties are missing.
The validate.expected and validate.required data can be specified at lower levels too…
grails { mongo { validate { required = [ "grails.mongo.host", "grails.mongo.databaseName" ] expected = [ "grails.mongo.port": 27017, "grails.mongo.bucket": "project" ] } } }
This way you can validate portions of the config by calling
grailsApplication.config.grails.mongo.validateExpectedProperties()
and so on.
Validating Existence of External Files
The ConfigUtils.validateExternalFiles method will check that a list of files does exist. Use it like this in Config.groovy.
grails.config.locations << "file:${userHome}/.emacs" grails.config.locations < "file:${userHome}/.grails/${appName}-config.groovy" ConfigUtils.validateExternalFiles(grails.config.locations)
A `ConfigurationException` will be thrown when any of the files does not exist.
Resources
- Grails plugin http://grails.org/plugin/validate-config.
- Sample app https://github.com/onetribeyoyo/validate-config/tree/master/example.
danmcharness pointed out that the sample app is not backward compatible with 2.1.4 or 2.0.4. So I created a couple new samples. Now github has example apps for 2.0.4, 2.1.4, and 2.2.1.