Spring配置文件外部化配置及.properties的通用方法

Spring配置文件外部化配置及.properties的通用方法

摘要:本文深入探讨了配置化文件(即.properties)的普遍应用方式。包括了Spring、一般的、远程的三种使用方案。

关键词:.properties, Spring, Disconf, Java

解决问题:如何正确使用.properties配置文件。

    

    若是有其他代码需要此Spring属性配置,将Spring配置中的属性值设置迁移到外部的属性文件中,是必需的操作,这也可以使Spring配置文件更易读。在这里我们不仅要讨论Spring的外部化配置,还要深入探讨配置化文件(即.properties)的普遍应用方式。这样就可以在不用重新打包和重新部署应用的情况下,配置这些属性值。从开发过程来看,将通用变量提出,并可配,也是写出高可读、低耦合代码的必然途径。从结果来看,这对于灵活性地进行测试、运维工作,是非常有好处的。在开发时,我们尽量把部署时需要修改的信息提出放在文件中,方便部署人员部署。一个大型系统中,多个项目有相同的配置信息,则部署人员部署时需要对多个不同的文件修改相同的信息,这不是好的代码结构,麻烦部署人员的同时,也增加了犯错的可能性。下面,就是针对以上问题的解决方案。

 

一、原先的Spring配置

 

    下面是普通的Spring配置文件。可以看出,这里的value可以提出,以供其它代码重用。

 

<bean id="IndexHandler" name="IndexHandler" class="wang.anqi.util.IndexHandler">
        <property name="solrUrl" value="http://192.8.125.30:8983/solr/core0"/>
</bean>

 

 

二、经过改良后的配置

 

1、Spring配置

 

    下面是引入了两个配置文件db.properties和solr.properties后的Spring配置文件。

 

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

        <property name="locations">
            <list>
                <value>classpath:db.properties</value>
                <value>classpath:solr.properties</value>
            </list>
        </property>
</bean>

<bean id="IndexHandler" name="IndexHandler" class="wang.anqi.util.IndexHandler">
        <property name="solrUrl" value=${solr.url}/>

</bean>

 

    以下是配置文件db.properties

 

db.ip = 192.8.125.201
db.name = aitanjupt
db.url = jdbc:mysql://${db.ip}:3306/${db.name}
db.username = root
db.password = 1234

 

    配置文件solr.properties

 

solr.url = http://192.8.125.30:8983/solr/core0

 

 

2、使用@Value注解来获取配置

 

    属性占位符配置的作用不限于XML中的Bean属性配置。还可以用它来配置@Value注解的属性。

 

public class IndexHandler
{
    @Value("${solr.url}")
    private String solrUrl;
}

 

 

    然而这种方式使用起来并不十分方便。你需要先在类里面申明一个属性。

 

3、使用ResourceBundle来读取配置

 

  1. 复制代码

    privatestaticString myValue;
    static{
    try{
    ResourceBundle bundle =ResourceBundle
    .getBundle(PROPERTIES_FILE_NAME,Locale.ENGLISH);//PROPERTIES_FILE_NAME可以是solr.properties文件名的一部分:"solr"
    myValue = bundle.getString(MY_VALUE_KEY).trim();//MY_VALUE_KEY可以是solr.url
    }
    catch(Exception ex){
    System.err.println("[Property]:Can't Load property.properties");
    myValue ="default value";
    System.out.println("myValue will use the default value: "+ myValue);
    }
    }

    复制代码

     

  2.  
  3.     这种方式使用起来比较方便。

 

三、远程读取配置文件

 

    只是通过以上方式来管理配置,尚觉不足。在一个比较大的系统中,很有可能多个子系统都需要使用相同配置的情况,当然,你可以将这些配置记入数据库中并提供接口,自己管理起来。但是如果需要实时地将配置信息推送到不同的子系统中,情况就更将复杂了。

    可以采用Disconf作为分布式配置管理平台,Disconf是一套完整的基于zookeeper的分布式配置统一解决方案。支持配置(配置项+配置文件)的分布式化管理,配置发布统一化,极简的使用方式(注解式编程 或 XML代码无代码侵入模式),低侵入性或无侵入性、强兼容性,需要Spring编程环境。其依赖于:Mysql、Tomcat、Nginx、zookeeeperRedis

   Disconf的缺陷在于安全问题,无需帐号登陆就可以下拉、下载各Properties。

    更多详细介绍请移步 https://github.com/knightliao/disconf

 

 

 


 

来自王安琪


 

作者:Angel 

出处:http://www.cnblogs.com/wgp13x/ 

欢迎转载或分享,但请务必声明文章出处。

如果文章对您有帮助,希望你能推荐关注

 

公告

王安琪,英文名Angel,南京邮电大学计算机应用技术硕士学位。 熟悉Java、C#编程语言。专注于WebService、海量数据处理、搜索引擎技术、消息中间件技术、分布式文件存储、.NET应用程序开发、系统架构设计。

主要从事大数据管理系统的研发,项目经理,系统架构师,就职于江苏金陵科技集团有限公司。

Email:aitanjupt@hotmail.com

QQ:289770363 

昵称:王安琪
园龄:6年5个月
粉丝:152
关注:58

+加关注

分类: JAVA,系统架构

标签: javaSpring.propertiesDisconf

转载于:https://my.oschina.net/airship/blog/1507174

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值