我試圖找到一種方法來設置UTF-8編碼的屬性,通過@Value
註釋從Spring.apprent.property文件訪問Spring引導。到目前爲止,我已經通過創建一個bean被成功設置編碼到我自己的屬性來源:Spring Boot默認屬性編碼更改?
@Bean
@Primary
public PropertySourcesPlaceholderConfigurer placeholderConfigurer(){
PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
configurer.setLocation(new ClassPathResource("app.properties");
configurer.setFileEncoding("UTF-8");
return configurer;
}
這樣的解決方案提出了兩個問題。有一次,它不適用於Spring Boot默認使用的「application.properties」位置(http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config),並且我被迫使用不同的文件名。
而另一個問題是,我只剩下手動定義和排序多個來源的支持位置(例如在jar vs jar外部屬性文件等),因此重做已經完成的工作。
如何獲得對已配置的PropertySourcesPlaceholderConfigurer的引用,並在應用程序初始化的恰當時間更改其文件編碼?
編輯: 也許我在其他地方犯了一個錯誤?這是什麼原因造成的實際問題對我來說:當我使用application.properties允許用戶個人的名字適用於從應用程序發送的電子郵件:
@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;
}
當我有placeholderConfigurer
豆如上圖所示加入,並把我的財產在'app.properties'內部,它被重新設置好了。只需將該文件重命名爲'application.properties'即可將其分解。
在這之前,你肯定沒有簡單的解決方案?我使用環境變量,並且使用了UTF-8的application.properties,沒有任何特別的問題。你遇到的問題究竟是什麼? –
@AlessandroSantini我已經更新了它對我造成的特殊問題。 – JockX
如果您調試該類,您是否看到錯誤?這聽起來更像是一個輸出問題。 – chrylis