优化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读取配置文件优化

1、达到目的:根据tomcat的启动参数中配置不同的spring.profiles.active的值,读取不同环境的配置参数。 2、spring配置文件的代码: ...
  • zjt1388
  • zjt1388
  • 2016年06月22日 12:35
  • 595

Spring配置优化_构造器注入+自动装配

2014-05-16 09:01:08上课内容: 依赖注入的第二种注入方式:构造器注入  创建带参数的构造方法,参数类型为注入类的类型...

Spring/Hibernate 应用性能优化的7种方法

对于大多数典型的 Spring/Hibernate 企业应用而言,其性能表现几乎完全依赖于持久层的性能。此篇文章中将介绍如何确认应用是否受数据库约束,同时介绍七种常用的提高应用性能的速成法,由OneA...

SpringMVC RESTful 性能优化

SpringMVC RESTful 性能优化 使用RESTful风格的接口有如下优势: 语言无关(这点对于我们Python+Java的后台系统很关键)开发效率高、调试方便接口的语义明确然而缺点也...
  • Finishx
  • Finishx
  • 2017年01月07日 17:05
  • 1651

Spring加载properties文件的两种方式

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

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

Spring中通过@Value注解和来获取配置文件中的配置信息。

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

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

Spring中加载配置文件的方式

Spring中加载配置文件的方式 Spring 中加载XML配置文件的方式,好像有3种, XML是最常见的Spring 应用系统配置源。Spring中的几种容器都支持使用XML装配bean,包括...
  • snowjlz
  • snowjlz
  • 2012年11月07日 16:35
  • 45205

java中读取配置文件的方法

一、使用org.apache.commons.configuration
  • stypace
  • stypace
  • 2014年08月07日 11:08
  • 37351

spring中如何读取.properties配置文件

主要使用了spring-core-4.1.4.RELEASE-sources.jar 这个jar包里的 PropertiesLoaderUtils.loadProperties 方法。不说了,直接上代...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:优化spring的配置文件的配置读取方式
举报原因:
原因补充:

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