1、创建自己的属性加载器
import org.springframework.boot.env.PropertiesPropertySourceLoader;
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.ArrayList;
import java.util.List;
import java.util.Properties;
public class SelfPropertySourceLoader extends PropertiesPropertySourceLoader {
@Override
public List<PropertySource<?>> load(String name, Resource resource) throws IOException {
Properties properties = loadUseUtf8(resource);
if (!properties.isEmpty()) {
PropertiesPropertySource source = new PropertiesPropertySource(name, properties);
List<PropertySource<?>> list = new ArrayList<>();
list.add(source);
return list;
}
return super.load(name, resource);
}
private Properties loadUseUtf8(Resource resource) throws IOException {
Properties props = new Properties();
InputStream is = resource.getInputStream();
try {
String filename = resource.getFilename();
if (filename != null && filename.endsWith(".xml")) {
props.loadFromXML(is);
} else {
// props.load(new InputStreamReader(is, "utf-8"));
if (resource.isFile()){
props.load(new InputStreamReader(is, FileUtil.getCharsetName(resource.getFile())));
}else {
props.load(new InputStreamReader(is, "GBK"));
}
}
} finally {
is.close();
}
return props;
}
}
FileUtil获取文件的编码方式,使用正确的编码方式载入属性
import info.monitorenter.cpdetector.io.*;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
public class FileUtil {
/**
* 获取文件编码方式
*/
public static String getCharsetName(File file) throws IOException {
String charsetName = "UTF-8";
CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();
detector.add(new ParsingDetector(false));
detector.add(JChardetFacade.getInstance());
detector.add(ASCIIDetector.getInstance());
detector.add(UnicodeDetector.getInstance());
Charset charset = detector.detectCodepage(file.toURI().toURL());
if (charset != null) charsetName = charset.name();
return charsetName;
}
}
引用库:implementation 'com.github.jiangxincode:cpdetector:1.0.10'
2、添加配置文件 resource/META-INF/spring.factories
如图:
内容:(注意替换成相应)
org.springframework.boot.env.PropertySourceLoader=com.zongjikeji.base.utils.SelfPropertySourceLoader
3、效果如下图:
错误编码方式加载:
正确编码加载: