Question

How to get values from properties file using Groovy?

I require to have a property file (.properties) which would have file names as key, and their destination path as the value. I will need the key to be resolved at runtime, depending on file that needs to be moved.

So far I am able to load the properties it seems but can't "get" the value from the loaded properties.

I referred to the thread : groovy: How to access to properties file? and following is the code snippet i have so far

def  props = new Properties();
File propFile = 
          new File('D:/XX/XX_Batch/XX_BATCH_COMMON/src/main/resources/patchFiles.properties')
props.load(propFile.newDataInputStream())
def config = new ConfigSlurper().parse(props)
    def ant = new AntBuilder()
    def list = ant.fileScanner {
                fileset(dir:getSrcPath()) {
                    include(name:"**/*")
                }
    }
    for (f in list) {
       def key = f.name
       println(props)
       println(config[key])
       println(config)
       def destn = new File(config['a'])

    }

the properties file has the following entries for now :

jan-feb-mar.jsp=/XX/Test/1
XX-1.0.0-SNAPSHOT.jar=/XX/Test/1
a=b
c=d

Correct values are returned if I look up using either props.getProperty('a') or, config['a'] Also tried the code: notation

But as soon as switch to using the variable "key", as in config[key] it returns --> [:]

I am new to groovy, can't say what am i missing here.

Was it helpful?

Solution

It looks to me you complicate things too much.

Here's a simple example that should do the job:

For given test.properties file:

a=1
b=2

This code runs fine:

Properties properties = new Properties()
File propertiesFile = new File('test.properties')
propertiesFile.withInputStream {
    properties.load(it)
}

def runtimeString = 'a'
assert properties."$runtimeString" == '1'
assert properties.b == '2'

OTHER TIPS

Unless File is necessary, and if the file to be loaded is in src/main/resources or src/test/resources folder or in classpath, getResource() is another way to solve it.

eg.

    def properties = new Properties()
    //both leading / and no / is fine
    this.getClass().getResource( '/application.properties' ).withInputStream {
        properties.load(it)
    }

    //then: "access the properties"
    properties."my.key"

Had a similar problem, we solved it with:

def content = readFile 'gradle.properties'

Properties properties = new Properties()
InputStream is = new ByteArrayInputStream(content.getBytes());
properties.load(is)

def runtimeString = 'SERVICE_VERSION_MINOR'
echo properties."$runtimeString"
SERVICE_VERSION_MINOR = properties."$runtimeString"
echo SERVICE_VERSION_MINOR

Just in case...

If a property key contains dot (.) then remember to put the key in quotes.

properties file:

a.x = 1

groovy:

Properties properties ...

println properties."a.x"
Properties properties = new Properties()

properties.load(new File("path/to/file.properties").newReader())

Just another way of doing it. Use this if it works for you. :)

Properties properties = new Properties()

//loading property file

File propertiesFile = new File(this.class.getResource('application.properties').getPath())

propertiesFile.withInputStream {

    properties.load(it)

}

//Accessing the value from property file

properties.getProperty('userName')

With static method extension:

Properties.metaClass.static.fromFile =
    {file -> new Properties().with{new File(file).withInputStream it.&load;it}}

def properties = Properties.fromFile('test.properties')

Groovy for getting value of property from "local.properties" by giving key.

Example- For finding value of this property's key is "mail.smtp.server"

In V5

ctx.getBean("configurationService")

configurationService = ctx.getBean("configurationService")

String value = configurationService.getConfiguration().getString("mail.smtp.server","")

In 1905

spring.getBean("configurationService")

configurationService = spring.getBean("configurationService")

String value = configurationService.getConfiguration().getString("mail.smtp.server","")

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top