优化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中加载配置文件的方式

Spring中加载配置文件的方式 Spring 中加载XML配置文件的方式,好像有3种, XML是最常见的Spring 应用系统配置源。Spring中的几种容器都支持使用XML装配bean,包括...

Spring加载properties文件的两种方式

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

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

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

Spring中config属性文件的读取与使用 PropertyPlaceholderConfigurer 注解@Component 1.配置文件:/WEB-INF/configInfo.prope...

spring配置文件详解--真的蛮详细

spring配置文件详解--真的蛮详细 转自: http://book.51cto.com/art/201004/193743.htm 此处详细的为我们讲解了spring2.5...

spring mvc修改配置文件路径

1.1.  Classpath 工程目录 在web.xml文件如下配置:      配置spring mvc 的核心servlet -->      servle.....

SpringMVC加载配置Properties文件的几种方式

最近开发的项目使用了SpringMVC的框架,yongxia

读取配置文件的3中方式

读取配置文件的3中方式

spring读取配置文件优化

1、达到目的:根据tomcat的启动参数中配置不同的spring.profiles.active的值,读取不同环境的配置参数。 2、spring配置文件的代码: ...

Spring的配置文件

Spring是基于容器的。如果Spring没有配置文件,那Spring就是一个空的容器,不能提供任何功能。 配置文件的功能是告诉Spring在应用上下文中有哪些bean以及这些bean是怎么样被连接...

Spring读取配置文件

完整的程序请参看: https://github.com/JeemyJohn/ReadConfigProperties.git 1. 添加Spring依赖2. 在resources目录下创建配置文件...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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