【问题标题】:Spring Boot properties files using UTF-8使用 UTF-8 的 Spring Boot 属性文件
【发布时间】: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 代码中的哪些属性文件读取合并,以便我可以添加此功能并提交拉取请求?

【问题讨论】:

标签: java spring-boot utf-8 properties-file


【解决方案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;
    

    `

    【讨论】:

      猜你喜欢
      • 2016-09-23
      • 2021-03-28
      • 2014-12-17
      • 2015-01-31
      • 1970-01-01
      • 2017-11-06
      • 2018-03-01
      • 2014-08-31
      • 2018-02-14
      相关资源
      最近更新 更多