Goal
- ApplicationContext의 MessageSource에 대해 알아본다
- messages.properties에 대해 알아본다
- 릴로딩 기능이 있는 메세지 기능 사용을 해본다
MessageSource란?
국제화 (i18n) 기능을 제공하는 인터페이스
public interface ApplicationContext extends MessageSource
- @Nullable
String getMessage(String code, @Nullable Object[] args, @Nullable String defaultMessage, Locale locale); - String getMessage(String code, @Nullable Object[] args, Locale locale) throws NoSuchMessageException;
- String getMessage(MessageSourceResolvable resolvable, Locale locale) throws NoSuchMessageException;
스프링 부트를 사용한다면 별다른 설정 없이 messages.properties 사용할 수 있음
messages.properties
greeting=hello {0}
messages_ko_KR.properties
greeting=안녕, {0}
@Component
public class AppRunner implements ApplicationRunner {
@Autowired
MessageSource messageSource;
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println(messageSource.getMessage("greeting", new String[]{"rosie"}, Locale.KOREA));
System.out.println(messageSource.getMessage("greeting", new String[]{"rosie"}, Locale.getDefault()));
}
}
결과
안녕 rosie
hello rosie
릴로딩 기능이 있는 메세지 기능 사용하기
@Component
public class AppRunner implements ApplicationRunner {
@Autowired
MessageSource messageSource;
@Override
public void run(ApplicationArguments args) throws Exception {
while(true){
System.out.println(messageSource.getMessage("greeting", new String[]{"rosie"}, Locale.KOREA));
System.out.println(messageSource.getMessage("greeting", new String[]{"rosie"}, Locale.getDefault()));
Thread.sleep(1000l);
}
}
}
@Bean
public MessageSource messageSource(){
var messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:/messages");
messageSource.setCacheSeconds(3);
return messageSource;
}
- 운영중에 메세지 변경 가능
- 단, 빌드를 꼭 해줘야 한다! 빌드된 디렉토리의 클래스패스 파일을 사용하기 때문
결과
안녕 rosie
hello rosie
안녕 rosie
hello rosie
-------------------- 메세지 변경
안녕 rosie
hello hi rosie
안녕 rosie
hello hi rosie
=> 1초마다 메세지 찍힘.
참고
스프링입문 강의 by 백기선
https://www.inflearn.com/course/lecture?courseSlug=spring&unitId=15538 https://www.inflearn.com/course/spring_revised_edition/dashboard
https://www.inflearn.com/course/spring_revised_edition/dashboard
'Spring > about spring' 카테고리의 다른 글
[IoC 컨테이너와 빈] ResourceLoader (0) | 2023.07.24 |
---|---|
[IoC 컨테이너와 빈] ApplicationEvent Publisher (0) | 2023.07.24 |
[IoC 컨테이너와 빈] Environment 프로파일, 프로퍼티 (0) | 2023.07.23 |
[IoC 컨테이너와 빈] 빈의 스코프 (0) | 2023.07.22 |
[IoC 컨테이너와 빈] @Component Scan (0) | 2023.07.22 |