摘要:本文深入探讨了配置化文件(即.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. 这种方式使用起来比较方便。

 
三、远程读取配置文件
 
    只是通过以上方式来管理配置,尚觉不足。在一个比较大的系统中,很有可能多个子系统都需要使用相同配置的情况,当然,你可以将这些配置记入数据库中并提供接口,自己管理起来。但是如果需要实时地将配置信息推送到不同的子系统中,情况就更将复杂了。
    可以采用Disconf作为分布式配置管理平台,Disconf是一套完整的基于zookeeper的分布式配置统一解决方案。支持配置(配置项+配置文件)的分布式化管理,配置发布统一化,极简的使用方式(注解式编程 或 XML代码无代码侵入模式),低侵入性或无侵入性、强兼容性,需要Spring编程环境。其依赖于:Mysql、Tomcat、Nginx、zookeeeper、Redis。
   Disconf的缺陷在于安全问题,无需帐号登陆就可以下拉、下载各Properties。
    更多详细介绍请移步 https://github.com/knightliao/disconf
 
 
 

Spring配置文件外部化配置及.properties的通用方法的更多相关文章

  1. Spring Boot 外部化配置(一)- Environment、ConfigFileApplicationListener

    目录 前言 1.起源 2.外部化配置的资源类型 3.外部化配置的核心 3.1 Environment 3.1.1.ConfigFileApplicationListener 3.1.2.关联 Spri ...

  2. Spring Boot 外部化配置(二) - @ConfigurationProperties 、@EnableConfigurationProperties

    目录 3.外部化配置的核心 3.2 @ConfigurationProperties 3.2.1 注册 Properties 配置类 3.2.2 绑定配置属性 3.1.3 ConfigurationP ...

  3. Spring Boot外部化配置实战解析

    一.流程分析 1.1 入口程序 在 SpringApplication#run(String... args) 方法中,外部化配置关键流程分为以下四步 public ConfigurableAppli ...

  4. 曹工谈Spring Boot:Spring boot中怎么进行外部化配置,一不留神摔一跤;一路debug,原来是我太年轻了

    spring boot中怎么进行外部化配置,一不留神摔一跤:一路debug,原来是我太年轻了 背景 我们公司这边,目前都是spring boot项目,没有引入spring cloud config,也 ...

  5. Dubbo 新编程模型之外部化配置

    外部化配置(External Configuration) 在Dubbo 注解驱动例子中,无论是服务提供方,还是服务消费方,均需要转配相关配置Bean: @Bean public Applicatio ...

  6. 玩转Spring Boot 自定义配置、导入XML配置与外部化配置

    玩转Spring Boot 自定义配置.导入XML配置与外部化配置       在这里我会全面介绍在Spring Boot里面如何自定义配置,更改Spring Boot默认的配置,以及介绍各配置的优先 ...

  7. SpringBoot 正式环境必不可少的外部化配置

    前言 <[源码解析]凭什么?spring boot 一个 jar 就能开发 web 项目> 中有读者反应: 部署后运维很不方便,比较修改一个 IP 配置,需要重新打包. 这一点我是深有体会 ...

  8. SpringBoot官方文档学习(二)Externalized Configuration(外部化配置)

    Spring Boot允许您将配置外部化,以便可以在不同的环境中使用相同的应用程序代码.您可以使用属性文件.YAML文件.环境变量和命令行参数来具体化配置.属性值可以通过使用@Value注释直接注入b ...

  9. 关于SpringBoot的外部化配置使用记录

    关于SpringBoot的外部化配置使用记录 声明: 若有任何纰漏.错误请不吝指出! 记录下使用SpringBoot配置时遇到的一些麻烦,虽然这种麻烦是因为知识匮乏导致的. 记录下避免一段时间后自己又 ...

随机推荐

  1. Scrum4.0+5.0 数独游戏

    1.题目: 1.准备看板. 形式参考图4. 2.任务认领,并把认领人标注在看板上的任务标签上. 先由个人主动领任务,PM根据具体情况进行任务的平衡. 然后每个人都着手实现自己的任务. 3.为了团队合作 ...

  2. 准备.Net转前端开发-WPF界面框架那些事,值得珍藏的8个问题

    题外话 不出意外,本片内容应该是最后一篇关于.Net技术的博客,做.Net的伙伴们忽喷忽喷..Net挺好的,微软最近在跨平台方面搞的水深火热,更新也比较频繁,而且博客园的很多大牛也写的有跨平台相关技术 ...

  3. 数论 - 算数基本定理的运用 --- nefu 118 : n!后面有多少个0

     题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemshow.php Mean: 略. analyse: 刚开始想了半天都没想出来,数据这么大,难道是有什么 ...

  4. win8.1安装开发工具vs2013.3+mssql2012全程

    几个常用的命令 重起计算机命令:shoutdown.exe -r -t 0 立刻重起 在远程桌面中没有关机重起的选项,这个命令是必须的 远程桌面连接:mstsc 硬件环境:I7 4770 64RAM ...

  5. 很震撼的HTML5视频播放器,电影院的感觉

    效果很震撼!有电影院的感觉了.呵呵. 看了下代码,依然是 在一个canvas里嵌入<video>然后getImageData 点击这里查看效果 代码: var canvas = docum ...

  6. ASP.NET几种页面数据绑定的用法及区别: <%#、 <%=、 <% 、<%@

    < %#... %>: 是在绑定控件DataBind()方法执行时被执行,用于数据绑定 如: < %# Container.DataItem("tit") %&g ...

  7. Yii路径总结

    如果是 // 就会默认去调 protected/views/layouts //代表 绝对路径 其实 就是 绝对和相对的关系 /代表相对路径,如module/user下的layout 用单斜杠的话默认 ...

  8. C#中的接口实现多态

    我们都知道虚方法实现多态,抽象方法实现多态等,我们今天来看看如何使用接口实现多态 1.首先我们先要来了解了解什么是接口,它存在的意识 01.接口就是为了约束方法的格式(参数和返回值类型)而存在的 02 ...

  9. Visual Studio图片注释image-comments扩展

            有一个开源的Visual Studio小工具image-comments,它用于在源代码注释中插入图片,您可以到这儿下载.目前支持Visual Studio 2010/2012 Sta ...

  10. Android笔记——Android中数据的存储方式(三)

    Android系统集成了一个轻量级的数据库:SQLite,所以Android对数据库的支持很好,每个应用都可以方便的使用它.SQLite作为一个嵌入式的数据库引擎,专门适用于资源有限的设备上适量数据存 ...