2010-01-13 8 views
35

Groovy 응용 프로그램이 있고 program.properties에 정의 된 속성에 프로그래밍 방식으로 액세스하려고합니다. groovy : 속성 파일에 액세스하는 방법?

테스트로서 나는 다음 시도했다 :

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

을하지만이 작동하지 않습니다 (예외를 throw).

어떤 도움이 유틸리티 클래스 ConfigSlurper를 사용 GPath 표현식을 사용하여 포함 된 속성에 액세스 할 수 있습니다 그루비에서 속성 파일을 읽기 위해 루이스

답변

8

대신

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

당신은 쓸 수 있습니다) 매우 쉽습니다.

message(code:"capacity.created") 

!

루이스

+0

나는 컨트롤러가 아닌 별도의 클래스를 가지고 있는데, 시도해 보았는데 작동하지 않는다 ... 어떤 제안이라도 있니? –

+0

@ CPU100 그 클래스에'messageSource'를 삽입하고' –

+0

이것은 제목에 동적 값을 전달해야하는 곳에서 효과가있었습니다. Xplora

68

환영합니다. 그러나 ConfigSlurper은 표준 Java 등록 정보 파일을 지원하지 않습니다. 일반적으로 ConfigSlurper은 속성 파일과 유사한 .groovy 파일을 읽는 데 사용되지만 표준 그루비 표기법을 따르므로 문자열은 따옴표 안에 있고 주석은 //으로 시작하거나 /* */ 블록 안에 있습니다. 따라서, Java 특성 당신이 java.util.Properties 객체를 생성하고 생성하는 것을 사용할 필요가 파일을 읽을 수있는 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 

는 그루비 표기 변형을 직접 사용해야합니다.

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

이렇게하면 표준 속성 파일에 비해 몇 가지 장점이 있습니다. 내가 직접 모든 메시지 특성 파일 (message_de.properties, message_fr.properties 등을 다시 읽는 wothout 메시지 속성에 액세스하는 방법을 발견

capacity { 
    created="x" 
    modified="y" 
} 
+0

답변 해 주셔서 감사합니다. 당신이 한 일은 모든 속성 파일에 유효하지만 메시지는 i18n 파일입니다. 나는 클라이언트의 로케일이 다른 언어로 설정되면 이것이 작동 할 것이라고 생각하지 않는다. 내 말은, 당신은 message_de, message_es, message_fr 등을 읽지 않는다는 것입니다. 게다가 모든 메시지는 이미 시스템에 의해 읽혀져 있습니다. 내가 그것을 피할 수 있다면 다시 읽지 않을 것입니다. – Luixv

+0

좋은 답변입니다. 감사합니다. – Gervase

+4

classpath에서로드하는 것에 대한주의 사항은'properties.load (getClass(). getClassLoader(). getResourceAsStream ("message.새로운 파일 ("file.properties"))' – banterCZ

2

그것은 국제화에 대한 message.properties를 읽을 수없는 가장 좋은 방법입니다. @Luixv 같은 컨트롤러에

message(code:"capacity.created") 

제안 또는 기타 봄

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

은/빈 messageSource을 주입 한 후 콩을 Grails는 : 당신은 사용할 수 있습니다.

관련 문제