`
QING____
  • 浏览: 2253240 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring环境读取Properties文件与编码问题

    博客分类:
  • JAVA
 
阅读更多

    目前Spring体系下基础技术栈有SpringMVC、SpringBoot(以及SpringCloud)两种,在读取配置文件的方式上有些差异,但是整体保持一致。最近遇到在读取配置文件时发生乱码的问题,其实解决方式也比较简单。

    1)对于properties文件,无论何种配置方式,Spring底层均使用Resource方式进行加载,最终基于JAVA本身的“classLoader.getResourceAsStream()”读取信息,编码默认为“ISO-8859-1”,编码方式可以通过配置指定。

    参见ConfigurationClassParser.java、ClassPathResource.java等。

    2)对于yml、xml文件,即配置文件的后缀以“yml”、“yaml”、“xml”(包括“properties”)结尾的配置文件,这种类型的配置目前只能在springboot技术栈中支持,编码方式为“UTF-8”,参见PropertiesPropertySourceLoader.java、YamlPropertySourceLoader.java。

 

    所以,对于编码问题,我们对于properties文件要特别注意,需要强制指定编码为“UTF-8”,否则可能出现本地环境运行正常、但是发布环境总是乱码的奇怪问题。

 

一、基于XML方式

    SpringMVC环境下,通常可以使用Bean-XML和注释两种方式来获取Properties属性,我们假定在resources目录下已存在“test.properties”文件:

test.name=Hi,你好,世界!

 

    Bean XML方式(一)

    1、Spring-Context.xml

<context:annotation-config />
<context:property-placeholder location="classpath:test.properties" ignore-unresolvable="true" file-encoding="UTF-8"/>

 

    2、TestService.java

@Service
public class TestService {

    @Value("${test.name}")
    private String testName;
    ...
}

 

    Bean XML方式(二)

    1、Spring-Context.xml

<bean id="globalProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="fileEncoding" value="UTF-8"/>
    <property name="locations">
        <array>
            <value>classpath:test2.properties</value>
        </array>
    </property>
</bean>

 

    2、TestService.java

@Service
public class TestService {

    @Value("#{globalProperties['test.name']}")
    private String testName;
    ...
}

 

    我们需要特别注意,如果在SpringMVC的Web项目中@Controllor层需要使用@Value注入属性时,我们需要将上述配置放在Servlet相关的Spring文件中,这个文件名通常与下属配置一致:

<servlet>
    <servlet-name>spring-mvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-web.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

    以此例,那么@Controller需要使用Properties属性时,它们的配置信息应该放置在spring-web.xml中,你放置在Spring-context.xml等类似于的文件是不可行的,因为SpringMVC中“Servlet容器”和“Spring组件容器”来自不同的BeanFactory,所以@Controllor和@Service、@Component、@Resource等需要区别对待。

 

    为了避免乱码,我们需要在所有声明properties加载的地方,都强制指定encoding,此外建议大家将spring基线版本升级到4.3.X+。

 

二、基于注释

    Spring 3.1+提供了一个比较便捷的注解,@PropertySource,可以帮助我们在springMVC、springBoot环境下直接使用。

@PropertySource(value = "classpath:test3.properties",encoding = "UTF-8")
@Controller
public class IndexController {

    @Value("${test.name}")
    private String testName;
    ....
}

 

    @PropertySource注意可以在任意Spring Bean组件中使用;但是还是那句话,@Controller和@Service、@Component等可能需要各自配置;此外建议创建@Configuration的配置管理类,将这些Properties只加载一次、以Bean的方式export以供所有组件共享使用。不要忘记“encoding”属性。

分享到:
评论

相关推荐

    spring读取properties

    - **编码问题**:Properties文件的编码格式应与Spring配置文件一致,避免因编码不匹配导致的乱码问题。 - **安全性考虑**:对于敏感信息如密码,应考虑加密存储,并在应用中解密使用,以增强系统的安全性。 - **动态...

    读取properties文件返回map

    在JavaScript环境中,没有内置的`Properties`类来直接处理`properties`文件。但可以通过第三方库,如`properties-parser`,或者自己编写解析函数来读取并解析文件内容。例如,使用Node.js的`fs`模块和`properties-...

    JAVA 解决Properties文件保存中文乱码

    在Java编程中,Properties文件是用于存储配置信息的...无论是保存还是读取,都需要确保与文件实际的编码一致。在处理这类问题时,了解和掌握不同的API以及它们的用法是至关重要的,这样才能确保程序的健壮性和正确性。

    java读取properties配置文件

    本文将详细介绍如何在Java中读取`properties`配置文件。 首先,我们需要了解`properties`文件的格式。一个标准的`.properties`文件通常包含多个行,每行由一个键和一个值组成,它们之间用等号(`=`)或冒号(`:`)...

    JAVA读取properties文件的值

    本篇文章将详细探讨如何在Java中读取`properties`文件的值。 ### 1. `java.util.Properties` 类 Java提供了一个内置类 `java.util.Properties`,专门用于处理`.properties`文件。这个类继承了`HashTable`,并提供...

    spring boot使用i18n时properties文件中文乱码问题的解决方法

    Spring Boot 使用 i18n 时 properties 文件中文乱码问题的解决方法 Spring Boot 是一个流行的 Java 框架,用于快速开发 Web 应用程序。然而,在使用 Spring Boot 时,遇到中文乱码问题的可能性很高,特别是在使用 ...

    Spring Boot多模块配置文件读取

    - Spring Boot支持配置文件的命名约定,如`application-{profile}.properties`或`application-{profile}.yml`,其中`{profile}`代表环境(如dev、test、prod)。 - 配置文件的加载顺序为:`application.properties...

    sftp直接以url模式读取-----------包括servlet如何借用springproperties取文件

    标题 "sftp直接以url模式读取-----------包括servlet如何借用springproperties取文件" 提到的是在Java开发中,如何通过SFTP(Secure File Transfer Protocol)协议以URL模式读取远程文件,并结合SpringProperties来...

    spring注解出现中文乱码

    ### Spring框架中注解出现中文乱码的问题解析与解决方案 #### 问题背景 在Spring框架的应用开发中,尤其是在处理HTTP请求时,经常会遇到通过JSON格式传递数据的情况。然而,在某些场景下,开发者可能会遇到中文...

    如何解决springboot读取配置文件的中文乱码问题

    在Spring Boot项目中,`application.properties`文件默认使用UTF-8编码,但如果编辑器、IDE或操作系统使用的默认编码不是UTF-8,就可能导致读取时的乱码。例如,如果你的IDE(如IntelliJ IDEA)的默认编码设置不是...

    java读取配置文件

    在Java编程中,读取配置文件是常见的任务,特别是在开发需要灵活配置的系统时。配置文件通常用于存储应用程序的设置...确保正确处理异常,保证资源及时关闭,以及在读取配置文件时考虑到安全问题,避免硬编码敏感信息。

    JAVA读取环境变量

    ### JAVA读取环境变量 #### 知识点概述 在Java程序中,有时我们需要根据不同的运行环境(如Windows或Linux)来获取系统环境变量。这些环境变量包含了操作系统配置的重要信息,比如路径设置、用户信息等。本文将...

    读取配置文件工具类.rar

    在实际开发中,为了提高代码的可复用性和灵活性,我们还可以考虑将这两个工具类整合为一个,提供通用的配置文件读取接口,通过文件扩展名或配置文件内容自动识别是`.properties`还是`.yml`格式,并进行相应的读取...

    Spring中属性文件properties的读取与使用详解

    在Spring框架中,属性文件(通常为`.properties`格式)被广泛用来存储应用程序的配置信息,如数据库连接、邮件设置等。这些配置信息可以独立于源代码,方便管理和修改。本文将详细介绍如何在Spring中读取和使用这些...

    Java读取.properties文件 的四种方法

    在Java编程中,读取`.properties`文件是常见的任务,这些文件通常用于存储配置信息,如数据库连接字符串、系统设置等。以下将详细介绍四种方法来读取`.properties`文件。 ### 方法一:使用`java.util.Properties` ...

    properties文件修改

    6. **资源绑定**:在Spring框架中,可以使用`@Value`注解将`.properties`文件中的属性值注入到Java bean的字段或方法中,实现配置的动态绑定。 7. **国际化(i18n)**:`.properties`文件也常用于实现应用的多语言...

    spring中properties加密

    本文将深入探讨如何在Spring项目中实现properties文件的加密。 1. **理解Properties文件** Spring框架广泛使用`properties`文件来存储配置信息。这些文件通常是纯文本格式,容易被读取,从而增加了安全性风险。...

    Spring配置三种数据源及从属性文件中读取DB连接四要素

    通过属性文件读取数据库连接信息,可以方便地管理和更新数据库配置,同时避免硬编码,提高代码的可维护性。在实际开发中,根据业务场景选择单数据源、多数据源或动态数据源,确保系统的稳定性和扩展性。

    java类文件通过$获取properties文件的属性值

    在Spring框架中,可以通过`@Value`注解方便地读取`.properties`文件中的配置信息。下面详细介绍如何实现这一功能。 ##### 2.1 配置文件内容 根据题目提供的部分内容,我们有一个名为`site.properties`的文件,其...

    Spring如何使用PropertyPlaceholderConfigurer读取文件

    使用PropertyPlaceholderConfigurer可以解决一些问题,例如,每一次加载配置文件时,我们都需要手工读取配置文件,这样编码麻烦且代码不优雅。使用PropertyPlaceholderConfigurer可以将配置文件的路径放在java虚拟机...

Global site tag (gtag.js) - Google Analytics