轉載請註明出處java
spring boot 在讀取本地文件方式時,中文亂碼,但讀取application.properties不亂碼,用文本工具查看resorces下的application.properties,發現中文格式是iso-8859-1編碼顯示,緣由找到,編輯器工具會自動轉編碼spring
查看源碼,看到底層調用Properties.load()時,輸入的流只支持8859-1.app
一種解決方法:修改代碼,新增一種配置文件格式,解決中文亂碼編輯器
下面新增**.prop格式爲例ide
實現處理類, 主要在props.load()作修改工具
package com.dl.qzj.txcard.config.common; import org.springframework.boot.env.PropertySourceLoader; import org.springframework.core.env.PropertiesPropertySource; import org.springframework.core.env.PropertySource; import org.springframework.core.io.Resource; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Properties; /** * @author xingguanghui * @create 2018-03-14 21:30 **/ public class MyPropertiesHandler implements PropertySourceLoader { public MyPropertiesHandler() { } @Override public String[] getFileExtensions() { return new String[]{"prop"}; } @Override public PropertySource<?> load(String name, Resource resource, String profile) throws IOException { if (profile == null) { Properties properties = getProperties(resource); if (!properties.isEmpty()) { PropertiesPropertySource propertiesPropertySource = new PropertiesPropertySource(name, properties); return new PropertiesPropertySource(name, properties); } } return null; } private Properties getProperties(Resource resource){ Properties properties= new Properties(); try(InputStream inputStream = resource.getInputStream();){ properties.load(new InputStreamReader(inputStream, "utf-8")); inputStream.close(); } catch (IOException e) { e.printStackTrace(); } return properties; } }
在項目路徑下新建 META-INF 文件夾 spring.factories 文件作配置ui
org.springframework.boot.env.PropertySourceLoader=com.dl.qzj.txcard.config.common;.MyPropertiesHandler
重啓項目,能夠處理 ***.prop 格式的配置文件,中文不會亂碼編碼