使用 UTF-8 的 Spring Boot 属性文件
Posted
技术标签:
【中文标题】使用 UTF-8 的 Spring Boot 属性文件【英文标题】:Spring Boot properties files using UTF-8 【发布时间】:2020-12-12 14:17:07 【问题描述】:尽管 Java 属性文件传统上仅支持 ISO-8859-1、JDK 9 and onward supports properties files encoded in UTF-8。虽然只有 JDK 9+ 支持带有内置默认属性文件读取的 UTF-8,但它使用的相同技术可以在任何 Java 版本中完成,环绕属性文件以添加 UTF-8 支持并回退到 ISO-8859 -1 用于向后兼容(就像 JDK 实现一样)。
我是 Spring Boot 的新手,我正在阅读它带来的所有漂亮的属性配置。 Spring Boot 是否支持从以 UTF-8 编码的属性文件加载属性?如果没有,Spring Boot 代码中的哪些属性文件读取合并,以便我可以添加此功能并提交拉取请求?
【问题讨论】:
这里回答了这个问题,查看@merz 的回答:***.com/questions/37436927/… 另外,spring boot 2.4 对配置道具的加载方式有很多新的变化,值得了解。 spring.io/blog/2020/08/14/… 例如,您可以拥有多个道具文件..etc 【参考方案1】:默认情况下,Spring 仅支持 ISO-8859-1 属性。但是有几种方法可以解决这个问题:
使用application.yaml
属性文件。
用@PropertySource(value = "classpath:/custom-name-of-application.properties", encoding="UTF-8")
注释你的@Configuration 类
使用 Java 参数运行您的应用程序以使用 UTF-8 文件:mvn spring-boot:run -Drun.jvmArguments="-Dfile.encoding=UTF-8"
【讨论】:
代码中哪里是为 Spring Boot 属性系统本地化的属性文件读取,以便我可以在源代码中添加 UTF-8 支持?如果它同时支持application.properties
和application.yaml
,则代码中必须有一个地方存在查找.properties
和.yaml
文件并读取它们的逻辑。
如果您真的想更深入地了解这一点,您可以查看PropertiesPropertySourceLoader.java 源代码。这会在 Spring Boot 中加载默认的 application.properties。
你有没有官方参考说“Spring 只支持 ISO-8859-1”?它在文档中吗?或者您至少可以指出代码中限制它支持 ISO-8859-1 的地方吗?
您对在代码中的何处进行更改的评论-您不认为将其作为答案的一部分会更好(因为这是问题的一部分),而不仅仅是下面的评论是吗?
我认为 Spring Boot 文档中没有提到编码。但是在源代码中你可以看到编码设置:github.com/spring-projects/spring-boot/blob/master/…【参考方案2】:
@PropertySource(value = "classpath:application-$env.properties", encoding = "UTF-8")
【讨论】:
【参考方案3】:使用
@PropertySource(value = "classpath:application.properties", encoding = "UTF-8")
在类级别,你可以使用@value 检索单个属性,但是你需要定义这个bean:`
@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfigInDev()
return new PropertySourcesPlaceholderConfigurer();
@Value("$my.property1")
private String property1;
`
【讨论】:
以上是关于使用 UTF-8 的 Spring Boot 属性文件的主要内容,如果未能解决你的问题,请参考以下文章
(013)Spring Boot之启动时设置默认配置文件属性
如何在 Spring Boot 中设置 UTF-8 字符编码?
使用 Spring Boot 创建 REST API [重复]
如何使用 Spring MVC & Security、Jasig CAS 和 JSP 视图在 Spring Boot 2 中配置 UTF-8?