반응형
    
    
    
  ApplicationContext 에서 상속하는 MessageSource 인터페이스를 이용!
국제화(i18n) 기능을 제공하는 인터페이스
1. 메시지 소스 파일 생성
 - 리소스 아래에 messages.properties / messages_ko_KR.properties 파일 생성 
  스프링 부트를 사용하면 Resource Bundle 이 빈으로 등록 되어 별다른 설정 없이 messages.priperties 파일을 사용 가능하다. 


- message.properties 파일 내용

2. 메시지 호출
package com.bpkim.demospring51;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.ApplicationContext;
import org.springframework.context.MessageSource;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.Locale;
@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[]{"bpkim"}, Locale.KOREA));
        System.out.println(messageSource.getMessage("greeting", new String[]{"bpkim"}, Locale.getDefault()));
    }
}
- 실행결과

3. 릴로딩 기능이 있는 메시지 소스 사용하기 
  - 메시지를 읽어오도록 빈 등록
package com.bpkim.demospring51;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.GenericApplicationContext;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
@SpringBootApplication
@PropertySource("classpath:/app.properties")
public class Demospring51Application {
    public static void main(String[] args) {
        SpringApplication.run(Demospring51Application.class, args);
    }
	// 3초마다 메시지를 읽어올 빈 등록
    @Bean
    public MessageSource messageSource(){
        ReloadableResourceBundleMessageSource messageSource =new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("classpath:/messages");
        messageSource.setDefaultEncoding("UTF-8");
        messageSource.setCacheSeconds(3);
        return messageSource;
    }- 보여주기
package com.bpkim.demospring51;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.ApplicationContext;
import org.springframework.context.MessageSource;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import java.util.Locale;
@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[]{"bpkim"}, Locale.KOREA));
            System.out.println(messageSource.getMessage("greeting", new String[]{"bpkim"}, Locale.getDefault()));
            Thread.sleep(1000l);
        }
    }
}
- 실행 
 실행 도중 message_ko_KR.properties 파일을 변경 > 빌드 하여 확인 해본다.

반응형
    
    
    
  '개발 > Spring' 카테고리의 다른 글
| Ioc 컨테이너 - ResourceLoader (0) | 2021.04.22 | 
|---|---|
| IoC - ApplicationEventPublisher (0) | 2021.04.11 | 
| IoC - Environment - 프로퍼티 (0) | 2021.04.11 | 
| IoC - Environment - 프로파일 (0) | 2021.04.10 | 
| IoC - 빈의 스코프 (0) | 2021.04.06 | 
 
									
								 
									
								 
									
								