zoukankan      html  css  js  c++  java
  • 使用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>



  • 相关阅读:
    日志收集
    解决spawn-fcgi child exited with: 1
    confluence启动关闭
    Informatica 启动、停止工作流命令
    启动obiee
    oracle修改连接空闲自动断开
    ORA-00845: MEMORY_TARGET not supported on this system
    svn执行clean up命令时报错
    手游推广
    phonegap/cordova 升级版本
  • 原文地址:https://www.cnblogs.com/penghq/p/10138223.html
Copyright © 2011-2022 走看看