groovy: comment accéder au fichier de propriétés?

j'ai une application Groovy et je veux accéder programatiquement à une propriété défini dans le message.propriété.

comme test j'ai essayé ce qui suit:

println "capacity.created " +  ${message.properties['capacity.created']}

mais il ne fonctionne pas (jette une exception).

toute aide est la bienvenue

Luis

35
demandé sur lalli 2010-01-13 13:33:20

3 réponses

pour lire des fichiers de propriétés dans Groovy vous pouvez utiliser la classe d'utilité ConfigSlurper et accéder aux propriétés contenues en utilisant des expressions GPath. Cependant, vous devez être conscient que ConfigSlurper ne supporte pas les fichiers de propriétés Java standard. Normalement, le ConfigSlurper sera utilisé pour lire .les fichiers de groovy qui peuvent être similaires à un fichier de propriété, mais adhèrent à la notation de groovy standard, donc les chaînes sont des guillemets à l'intérieur et les commentaires commencent par // ou sont dans un bloc /* */ . Ainsi, pour lire un fichier de propriétés Java, vous devez créer un objet java.util.Properties et l'utiliser pour créer un ConfigSlurper :

def props = new Properties()
new File("message.properties").withInputStream { 
  stream -> props.load(stream) 
}
// accessing the property from Properties object using Groovy's map notation
println "capacity.created=" + props["capacity.created"]

def config = new ConfigSlurper().parse(props)
// accessing the property from ConfigSlurper object using GPath expression
println "capacity.created=" + config.capacity.created

si vous n'utilisez le fichier de propriété que depuis le code de Groovy, vous devez utiliser la variante de notation de Groovy directement.

def config = new ConfigSlurper().parse(new File("message.groovy").toURL())

cela vous donne aussi de beaux avantages par rapport aux fichiers de propriétés standard, par exemple au lieu de

capacity.created="x"
capacity.modified="y"

vous pouvez écrire

capacity {
  created="x"
  modified="y"
}
70
répondu Christoph Metzendorf 2010-01-13 14:34:42

j'ai trouvé un moyen d'accéder aux propriétés des messages directement sans relire tous les messages des fichiers de propriétés (message_de.propriétés, message_fr.propriétés, etc.) Il est très facile d'accès.

message(code:"capacity.created")

et ça marche!

Luis

8
répondu Luixv 2010-01-14 14:31:15

ce n'est pas une bonne pratique de lire message.properties pour i18n. Vous pouvez utiliser:

message(code:"capacity.created")

dans les contrôleurs comme @Luixv l'a suggéré ou

messageSource.getMessage("capacity.created",
                        [].toArray(), "Capacity Created.", null)

dans tout autre grain de printemps/grain après injection du grain messageSource .

2
répondu Alexander Suraphel 2015-05-21 07:48:14