웹어플리케이션이 구동중에 MessageSource가 변경되는 경우 ReloadableResourceBundleMessageSource를 이용하면 ResourceBundleMessageSource와 달리
재시작을 하지 않아도 된다. 하지만 이 방법은 개발시에는 유용하지만 실제 운영 서버에서는 다른 기타 문제가 발생할 수 있기 때문에 
비추하는 방법이라 한다.뿐만 아니라 ReloadableResourceBundleMessageSource에서 사용하는 MessageSource 파일은 classpath안에 
두지 않아야 한다. 그 이유는 애플리케이션 서버는 클래스패스에 있는 모든 리소스를 캐싱하기 때문이라 한다. 그렇기 때문에

<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath:/message/message-sample</value>
</list>
</property>
<property name="defaultEncoding" value="UTF-8" />
<property name="cacheSeconds">
<value>60</value>
</property>
</bean>

위처럼 정의한다면, 로케일을 기반으로 messages_<LID>.properties 와 errors_<LID>.properties 를 찾게 된다.
단 classpath 대신 WEB-INF/message/message-sample 과 같은 위치에 두는 것이 좋다


MessageSource의 사용은

예를 들어 message-sample_en_US.properties가

message = hi my name is {0} 

형태로 되어있다고 했을때

@Inject
MessageSource messagesource

messageSource.getMessage("message", new String[] {"stewie"}, "no surch", Locale.US);

같은 메서드의 결과가 hi my name is stewie 와 같이 나온다고 한다.

http://www.javajigi.net/pages/viewpage.action?pageId=207061054
http://jjaeko.tistory.com/18

신고
Posted by Stewie
TAG


티스토리 툴바