¿Cambio de codificación de propiedades predeterminadas de Spring Boot?
Estoy tratando de encontrar una manera de configurar la codificación UTF-8 para las propiedades a las que se accede a través de@Value
anotación de los archivos application.property en Spring boot. Hasta ahora, he establecido correctamente la codificación en mis propias fuentes de propiedades creando un bean:
@Bean
@Primary
public PropertySourcesPlaceholderConfigurer placeholderConfigurer(){
PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
configurer.setLocation(new ClassPathResource("app.properties");
configurer.setFileEncoding("UTF-8");
return configurer;
}
Tal solución presenta dos problemas. Por una vez, NO funciona con las ubicaciones "application.properties" utilizadas de forma predeterminada por Spring Boot (http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config), y me veo obligado a usar diferentes nombres de archivo.
Y el otro problema es que con él me queda definir y ordenar manualmente las ubicaciones admitidas para múltiples fuentes (por ejemplo, en el archivo de propiedades jar vs jar externo, etc.) rehaciendo así un trabajo bien hecho.
¿Cómo obtendría una referencia a PropertySourcesPlaceholderConfigurer ya configurado y cambiaría su codificación de archivos en el momento justo de inicialización de la aplicación?
Editar: ¿Quizás estoy cometiendo un error en otro lugar? Esto es lo que me causa un problema real: cuando uso application.properties para permitir que los usuarios apliquen su nombre personal a los correos electrónicos enviados desde una aplicación:
@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;
}
Cuando tengoplaceholderConfigurer
Bean como se muestra arriba agregado, y coloque mi propiedad dentro de 'app.properties', se resuelve muy bien. Simplemente renombrar el archivo a 'application.properties' lo rompe.