Since Grails 3 we can use a random value for a configuration property. This is because Grails now uses Spring Boot and this adds the RandomValuePropertySource
class to our application. We can use it to produce random string, integer or lang values. In our configuration we only have to use ${random.<type>}
as a value for a configuration property. If the type is int
or long
we get a Integer
or Long
value. We can also define a range of Integer
or Long
values that the generated random value must be part of. The syntax is ${random.int[<start>]}
or ${random.int[<start>,<end>}
. For a Long
value we replace int
with long
. It is also very important when we define an end value that there cannot be any spaces in the definition. Also the end value is exclusive for the range.
If the type is something else then int
or long
a random string value is generated. So we could use any value after the dot (.
) in ${random.<type>}
to get a random string value.
In the following example configuration file we use a random value for the configuration properties sample.random.password
, sample.random.longNumber
and sample.random.number
:
# File: grails-app/conf/application.yml ... --- sample: random: password: ${random.password} longNumber: ${random.long} number: ${random.int[400,420]} ...
Next we have this simple class that used the generated random values and displays them on the console when the application starts:
// File: src/main/groovy/com/mrhaki/grails/random/RandomValuesPrinter.groovy package com.mrhaki.grails.random import org.springframework.beans.factory.annotation.Value import org.springframework.boot.CommandLineRunner import org.springframework.stereotype.Component @Component class RandomValuesPrinter implements CommandLineRunner { @Value('${sample.random.password}') String password @Value('${sample.random.number}') Integer intValue @Value('${sample.random.longNumber}') Long longValue @Override void run(final String... args) throws Exception { println '-' * 29 println 'Properties with random value:' println '-' * 29 printValue 'Password', password printValue 'Integer', intValue printValue 'Long', longValue } private void printValue(final String label, final def value) { println "${label.padRight(12)}: ${value}" } }
When we run our Grails application we can see the generated values:
$ grails run-app ... ----------------------------- Properties with random value: ----------------------------- Password : 018f8eea05470c6a9dfe0ce3c8fbd720 Integer : 407 Long : -1201232072823287680 ...
Written with Grails 3.0.8.