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

 

About the Author

Object Partners profile.

One thought on “Validating Grails Configurations

  1. amiller says:

    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.

Leave a Reply

Your email address will not be published.

Related Blog Posts
Kafka Schema Evolution With Java Spring Boot and Protobuf
In this blog I will be demonstrating Kafka schema evolution with Java, Spring Boot and Protobuf.  This app is for tutorial purposes, so there will be instances where a refactor could happen. I tried to […]
Redis Bitmaps: Storing state in small places
Redis is a popular open source in-memory data store that supports all kinds of abstract data structures. In this post and in an accompanying example Java project, I am going to explore two great use […]
Let’s build a WordPress & Kernel updated AMI with Packer
First, let’s start with What is an AMI? An Amazon Machine Image (AMI) is a master image for the creation of virtual servers in an AWS environment. The machine images are like templates that are configured with […]
Single Node Kubernetes on Raspberry Pi 4
In this post, I will go through the steps I used to create a single node Kubernetes combination master and worker node on a Raspberry Pi 4. The heavy lifting in this post is done […]