2015-01-10 2 views
3

스프링 부트의 application.property 파일에서 @Value annotation을 통해 액세스되는 속성에 대해 UTF-8 인코딩을 설정하는 방법을 찾으려고합니다. 지금까지 bean을 생성하여 내 자신의 속성 소스로 인코딩을 성공적으로 설정했습니다 :봄 부팅 기본 속성 인코딩 변경?

@Bean 
@Primary 
public PropertySourcesPlaceholderConfigurer placeholderConfigurer(){ 
    PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer(); 
    configurer.setLocation(new ClassPathResource("app.properties"); 
    configurer.setFileEncoding("UTF-8"); 
    return configurer; 
} 

이러한 솔루션은 두 가지 문제점을 제시합니다. 한 번, 스프링 부트 (http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config)가 기본적으로 사용하는 "application.properties"위치에서는 작동하지 않으며 다른 파일 이름을 사용해야합니다.

다른 문제는 수동으로 정의하고 여러 소스 (예 : jar와 jar 속성 파일 외)에서 지원되는 위치를 수동으로 정의하고 순서를 지정하여 작업이 이미 완료되었다는 것입니다.

이미 구성된 PropertySourcesPlaceholderConfigurer에 대한 참조를 얻고 응용 프로그램 초기화가 필요할 때 파일 인코딩을 변경하는 방법은 무엇입니까?

편집 : 아마도 내가 다른 곳에서 실수를 저지르고 있습니까? 이것은 나를 위해 실제 문제를 일으키는 것입니다 : 추가 위의 그림과 같이 내가 placeholderConfigurer 콩이있을 때

@Value("${mail.mailerAddress}") 
private String mailerAddress; 

@Value("${mail.mailerName}") 
private String mailerName;      // Actual property is Święty Mikołaj 

private InternetAddress getSender(){ 
    InternetAddress sender = new InternetAddress(); 
    sender.setAddress(mailerAddress); 
    try { 
     sender.setPersonal(mailerName, "UTF-8"); // Result is Święty Mikołaj 
     // OR: sender.setPersonal(mailerName); // Result is ??wiÄ?ty Miko??aj 
    } catch (UnsupportedEncodingException e) { 
     logger.error("Unsupported encoding used in sender name", e); 
    } 
    return sender; 
} 

, 내 재산을 배치 : 나는 할 수 있도록 application.properties을 사용하면 사용자가 응용 프로그램에서 보낸 이메일에 개인 이름을 적용 inside 'app.properties'그것은 잘된 것입니다. 파일 이름을 'application.properties'로 변경하면 문제가 발생합니다.

+1

을 그 일을하기 전에, 더 간단한 해결책이없는 확신? 환경 변수를 사용하고 특별한 문제없이 UTF-8을 사용하여 application.properties를 사용했습니다. 정확히 당신이 겪고있는 문제는 무엇입니까? –

+0

@AlessandroSantini 나는 그것이 나를 위해 일으키는 특별한 문제로 질문을 업데이트했다. – JockX

+0

클래스를 디버깅하는 경우 오류가 표시됩니까? 출력 문제처럼 들립니다. – chrylis

답변

6

Apparently 봄 부팅의 ConfigFileApplicationListener에 의해로드 된 속성은 디자인 및 형식 사양에 따라 ISO 8859-1 문자 인코딩으로 인코딩됩니다.

한편, .yaml format은 기본적으로 UTF-8을 지원합니다. 간단한 확장 기능 변경으로 인해 문제가 해결되었습니다.

0

@JockX 제안이 완벽하게 작동합니다. 또한 속성에서 yaml 로의 변환은 매우 간단합니다. 이 :

spring.main.web_environment=false 
email.subject.text=Here goes your subject 
email.from.name=From Me 
[email protected] 
email.replyTo.name=To Him 
[email protected] 

이 될 것입니다 :

spring: 
    main: 
    web_environment: false 
email: 
    subject: 
    text: Here goes your subject 
    from: 
    name: From Me 
    address: [email protected] 
    replyTo: 
    name: To Him 
    address: [email protected]