• 使用Spring PropertyPlaceholderConfigurer 配置中文出现乱码的解决方法


    在使用org.springframework.beans.factory.config.PropertyPlaceholderConfigurer 读取配置文件时,发现对于中文的处理会出现乱码现象,比如有如下的配置项及其内容:

    jdbc.url=jdbc:mysql://192.168.0.89:3306/pcms-山东农信?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false

    采用如下的配置方式:

    <bean id="propertyConfigurer"
              class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="locations">
                <list>
                    <value>classpath:config/property/jdbc.properties</value>
                    <value>classpath:config/property/baiduPush.properties</value>
                </list>
        </bean>

    通过Spring获取到的配置项内容,中文变成了乱码。

    通过了解类org.springframework.beans.factory.config.PropertyPlaceholderConfigurer的继承关系,发现父类org.springframework.core.io.support.PropertiesLoaderSupport中有这样的属性fileEncoding,这一属性的使用是在loadProperties方法中:

    /**
         * Load properties into the given instance.
         * @param props the Properties instance to load into
         * @throws IOException in case of I/O errors
         * @see #setLocations
         */
        protected void loadProperties(Properties props) throws IOException {
            if (this.locations != null) {
                for (Resource location : this.locations) {
                    if (logger.isInfoEnabled()) {
                        logger.info("Loading properties file from " + location);
                    }
                    try {
                        PropertiesLoaderUtils.fillProperties(
                                props, new EncodedResource(location, this.fileEncoding), this.propertiesPersister);
                    }
                    catch (IOException ex) {
                        if (this.ignoreResourceNotFound) {
                            if (logger.isWarnEnabled()) {
                                logger.warn("Could not load properties from " + location + ": " + ex.getMessage());
                            }
                        }
                        else {
                            throw ex;
                        }
                    }
                }
            }
        }

    通过添加fileEncoding=utf-8属性可以解决上述问题:

    <bean id="propertyConfigurer"
              class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="locations">
                <list>
                    <value>classpath:config/property/jdbc.properties</value>
                    <value>classpath:config/property/baiduPush.properties</value>
                </list>
            </property>
            <property name="fileEncoding">
                <value>utf-8</value>
            </property>
        </bean>



  • 相关阅读:
    javascript实现网页分享至朋友圈功能
    Vue中全局过滤器期与局部过滤器期的使用
    vue中添加与删除,关键字搜索
    vue生命周期
    4种常用的Ajax请求方式
    CSS 基础总结
    BEM思想之彻底弄清BEM语法
    学习前端过程中用到的资料
    深入理解,函数声明、函数表达式、匿名函数、立即执行函数、window.onload的区别.
    html基础
  • 原文地址:https://www.cnblogs.com/penghq/p/10138223.html
Copyright © 2020-2023  润新知