web-dev-qa-db-fra.com

Obtenir les valeurs du fichier de propriétés en utilisant Groovy

Comment obtenir des valeurs d'un fichier de propriétés en utilisant Groovy?

J'ai besoin d'avoir un fichier de propriétés (.properties) qui aurait pour noms de fichier comme clé et leur chemin de destination comme valeur. J'aurai besoin que la clé soit résolue au moment de l'exécution, en fonction du fichier à déplacer.

Jusqu'à présent, il me semble que je peux charger les propriétés, mais je ne peux pas "obtenir" la valeur des propriétés chargées.

Je me suis référé au fil: groovy: Comment accéder au fichier de propriétés? et voici l'extrait de code que j'ai jusqu'à présent

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'])

    }

le fichier de propriétés contient les entrées suivantes pour l'instant:

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

Les valeurs correctes sont renvoyées si je cherche en utilisant soit props.getProperty ('a') ou, config ['a'] Aussi essayé le code: notation

Mais dès que vous passez à la variable "key", comme dans config [key], elle retourne -> [:]

Je suis novice, je ne peux pas dire ce qui me manque ici.

38
user3151610

Il me semble que vous compliquez trop les choses.

Voici un exemple simple qui devrait faire le travail:

Pour donné test.properties fichier:

a=1
b=2

Ce code fonctionne bien:

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'
103
JBaruch

Sauf si File est nécessaire et si le fichier à charger se trouve dans le dossier src/main/resources Ou src/test/resources Ou dans le chemin de classe, getResource() est un autre moyen de le résoudre. .

par exemple.

    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"
7
prayagupd

Au cas où...

Si une clé de propriété contient un point (.), N'oubliez pas de la mettre entre guillemets.

fichier de propriétés:

a.x = 1

sensationnel:

Properties properties ...

println properties."a.x"
6

Si nous avions un problème similaire, nous l'avons résolu avec:

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
3
user3265317