2016-08-24 2 views
0

클래스 경로 (src/main/resources) 안에 messages_en.properties가 있고/config 폴더에 jar 파일 밖에 있습니다. 그러나/구성 폴더 messages_en.properties (콘텐츠)까지도이 태그 가한 후, 클래스 경로 안에있는 콘텐츠를 덮어 쓰지 않는다 :외부 messages_en.properties의 messages_en.properties 내용 덮어 쓰기

spring.config.location = 설정/messages_en.properties을

내가 틀렸는가 아니면 이것이 봄 부츠에서 전혀 가능하지 않습니까?

note 참고 application.properties는/config 폴더 (외부화 된 구성)에 있습니다.

답변

1

spring.config.location은 외부 응용 프로그램 구성 (externalized configuration)의 위치를 ​​제공하는 데 사용됩니다. 당신은 예를 들어, 당신은 file:과 경로를 앞에해야 외부 위치를 참조하려면

: 당신이 파일이 messages_en.properties라고 사용할 때

spring.config.location=file:config/application.properties 
그러나

, 그것은 더 가능성이 높습니다 이 파일은 application.properties 파일 대신에 MessageSource (국제화/현지화 용)이 사용하는 특성 파일입니다.

당신은 예를 들어, spring.messages.* 속성을 구성하여,뿐만 아니라 이러한 메시지에 대한 외부의 위치를 ​​구성 할 수 있습니다

:

spring.messages.basename=file:config/messages 

이 국제 대회이기 때문에 당신은 언어 코드 (en)를 추가 할 필요가 없습니다 Spring이 적절한 메시지 파일을 탐지하기 위해 이미 사용하고있다.

MessageSource을 호출 할 때 주어진 언어에 따라 messages_en.properties 또는 messages_fr.properties를 열거 나 ... 제공된 언어에 대한 속성이없는 경우 폴백으로 messages.properties를 사용합니다.

편집 : MessageSourceAutoConfiguration는 당신이 기본 대체에게 messages.properties이 필요 클래스 패스 자원 에 대한의 개막과 것으로 보인다. 당신이 그것들을 가지고 있지 않으면, 그것은 효과가 없을 것입니다.

그러나 여전히 이러한 속성을 사용할 수 있으며, MessageSource 수동 @ConfigurationProperties를 사용하여 생성 : 그것은 몇 번 (응용 프로그램이 다시 시작) 일

@Bean 
@ConfigurationProperties("spring.messages") 
public MessageSource messageSource() { 
    return new ReloadableResourceBundleMessageSource(); 
} 
+0

, 그러나 그 후에는 지금 messages_en을 따기. classpath와 external (즉, config/messages_en.properties) 내부에서 정의 된 속성은 내부의 속성을 덮어 쓰지 않습니다. 이제 클래스 패스 내부의 속성을 제거하면 더 이상 속성을 찾을 수 없다는 메시지가 나타납니다. 어디에서 잘못 될 수 있는지 알려 주실 수 있습니까? – Pavanraotk

+0

외부 설정과 함께'MessageSource' 빈을 명시 적으로 ('@ Bean') 만들고 기본 ('@ Primary')으로 만들 수 있습니까? 어떻게 든 Spring은 classpath 메시지를 사용하는 또 다른'MessageSource' 빈을 만들고 있다고 생각합니다. – g00glen00b

+0

빈을 작성했습니다. @Bean 공개 ReloadableResourceBundleMessageSource messageSource() { ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); //messageSource.setBasenames("file:C:\\Users\\pavan.rao\\Documents\\mobiquity\\txn\\target\\config\\messages ","classpath : messages "); messageSource.setBasenames ("file : config/messages", "classpath : messages"); return messageSource; } 이제 절대 경로를 사용하면 절대 경로없이 작동하지 않습니다. 어떤 생각? – Pavanraotk