优化spring的配置文件的配置读取方式

原创 2016年08月28日 19:58:18

在开发过程我们经常需要用到各种各样的配置文件,用spring读取配置文件的方式网程序员设置一些值是一种比较方便、可扩展性比较好的方法。


但是我们经常会遇到这样一个问题,例如同一个dao的配置文件,可能因为在测试环境,预发布环境,正式环境都需要连接不同的数据库,因此每发布一次就需要修改一次配置,这是比较麻烦的!特别在配置文件比较多的情况下,容易忘记!那么怎么办呢?其实只要将配置文件放在绝对路径下就好了。这样只要第一次发布之后,配置文件不随着项目源码的改变而改变,因为每次读取的都是固定路径的配置,这样各种配置文件是统一维护的,也方便管理。


这样会带来的一个问题就是,因为开发小组成员之间所用的电脑操作系统可能是不同的,window的文件路径是Linux、mac等都是不一样的,window需要C:\\XX,而其他操作系统确实XX/XX这样的形式。所以在读取需要在程序上面稍微变动一下,在读取window系统的时候默认从一个盘加载配置文件。


好了,来看看具体怎么做的吧。。自定义一个类用于读取配置文件,继承PropertiesFactoryBean,并且重写其方法!


 /**
     * location改为paths
     */
    protected String[] paths;
    public void setPaths(String[] paths) {
        this.paths = paths;
    }

    public void setFileEncoding(String fileEncoding) {
        this.fileEncoding = fileEncoding;
    }

    protected void loadProperties(Properties props) throws IOException {
        if(this.paths != null) {
            String[] arr$ = this.paths;
            int len$ = arr$.length;

            for(int i$ = 0; i$ < len$; ++i$) {
                String path = arr$[i$];
                if(this.logger.isInfoEnabled()) {
                    this.logger.info("Loading properties file from " + path);
                }

		// 如果是window系统,默认在路径前面加一个c:,从c盘开始读取文件
                String os = System.getProperty("os.name");
                if(os.toLowerCase().contains("window")) {
                    path = "C:" + path;
                }

                FileSystemResource fileSystemResource = new FileSystemResource(path);

                try {
                    //改为用文件流的形式,这样可以从绝对路径读取配置文件
                    this.fillProperties(props, new EncodedResource(fileSystemResource, this.fileEncoding), this.propertiesPersister);
                } catch (IOException var9) {
                    if(!this.ignoreResourceNotFound) {
                        throw var9;
                    }

                    if(this.logger.isWarnEnabled()) {
                        this.logger.warn("Could not load properties from " + path + ": " + var9.getMessage());
                    }
                }
            }
        }

    }

    void fillProperties(Properties props, EncodedResource resource, PropertiesPersister persister) throws IOException {
        InputStream stream = null;
        Reader reader = null;

        try {
            String filename = resource.getResource().getFilename();
            if(filename != null && filename.endsWith(".xml")) {
                stream = resource.getInputStream();
                persister.loadFromXml(props, stream);
            } else if(resource.requiresReader()) {
                reader = resource.getReader();
                persister.load(props, reader);
            } else {
                stream = resource.getInputStream();
                persister.load(props, stream);
            }
        } finally {
            if(stream != null) {
                stream.close();
            }

            if(reader != null) {
                reader.close();
            }

        }

    }



下面就可以用了,在xml文件这样配置就行啦:

<bean id="dbResources" class="java.util.ArrayList">
        <constructor-arg>
            <list>
                <value>/data/config/database.properties</value>
            </list>
        </constructor-arg>
    </bean>
<bean id="dbPropertyConfigurer" class="com.example.config.utils.YourPropertyPlaceholderConfigurer">
        <property name="order" value="1" />
        <property name="ignoreUnresolvablePlaceholders" value="true" />
        <property name="paths" ref="dbResources" />
        <property name="fileEncoding" value="utf-8"></property>
    </bean>



其他时候的用法同spring原生配置一样,这里只是改了一下,让他从绝对路径加载配置文件,并且处理了一下不同操作路径不统一的问题





Spring加载properties文件的两种方式

在项目中如果有些参数经常需要修改,或者后期可能需要修改,那我们最好把这些参数放到properties文件中,源代码中读取properties里面的配置,这样后期只需要改动properties文件即可,...
  • eson_15
  • eson_15
  • 2016年05月10日 19:47
  • 86394

spring 获取自定义配置文件properties中参数

Spring中config属性文件的读取与使用 PropertyPlaceholderConfigurer 注解@Component 1.配置文件:/WEB-INF/configInfo.prope...
  • lifuxiangcaohui
  • lifuxiangcaohui
  • 2015年06月09日 16:08
  • 21635

通过Spring读取properties配置文件

一般propertie
  • yh_zeng2
  • yh_zeng2
  • 2017年07月28日 00:09
  • 2277

读取和使用Spring的配置文件

ApplicationContext是Spring的核心,Context我们通常解释为上下文环境,我想用“容器”来表述它更容易理解一些,ApplicationContext则是“应用的容器”了,Spr...
  • xiu2016
  • xiu2016
  • 2017年08月02日 10:01
  • 152

自定义类在spring中读取properties配置文件信息

我们会将一些配置的信息放在。properties文件中,然后使用${}将配置文件中的信息读取至spring的配置文件。那么我们如何在spring读取properties文件呢。1.首先。我们要先在sp...
  • zsg88
  • zsg88
  • 2017年03月17日 13:26
  • 725

SpringMVC中如何读取配置文件中的值

第一种情况是在测试类中读取配置文件中的值,实现如下: 1、在spring-mybatis配置文件中引入配置文件,代码如下: cl...
  • cwzhsi
  • cwzhsi
  • 2015年01月28日 22:34
  • 8015

spring 读取配置文件的方法

 PropertyPlaceholderConfigurer 这个类是spring用来处理系统配置文件并且具有将spring配置文件中的以${properties}的形式替换成key为p...
  • nanlove1
  • nanlove1
  • 2014年07月22日 11:47
  • 1075

利用Spring的@Value注解读取配置文件

spring读取配置文件方法
  • flysun3344
  • flysun3344
  • 2016年08月16日 23:58
  • 10500

Spring中获取外部配置文件中的属性值

Spring中通过@Value注解和来获取配置文件中的配置信息。
  • duqi_2009
  • duqi_2009
  • 2015年09月14日 16:17
  • 6296

SSH框架系列:Spring读取配置文件以及获取Spring注入的Bean

1.简介 在SSH框架下,假设我们将配置文件放在项目的src/datasource.properties路径下,Spring的配置文件也是src/applicationContext.xml路径下,...
  • NUPTboyZHB
  • NUPTboyZHB
  • 2013年12月09日 16:29
  • 3600
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:优化spring的配置文件的配置读取方式
举报原因:
原因补充:

(最多只允许输入30个字)