3.3配置框架使用
开发中如果需要使用配置文件中设置的信息,可以使用下面的方式编写。
这样获取配置不仅能够能够跟踪到哪些配置在哪里使用了,并且在一些需要反复获取配置的地方能变为直接获取一个类属性,在配置修改时emap会自动修改对应的类属性。
注:需要让Config标注生效,需要在应用中添加app.properties文件,文件位置见第三部分。
3.3.1配置与属性绑定
可在类的静态非final的属性前添加Config标注,设置这个属性与哪个配置绑定。
如:
@Config(name="emap.config.test", description="是否为测试模式")
private static boolean testMode;
@Config(name="emap.config.name", description="项目的名称")
private static String projectName = "EMAP";
@Config(name="emap.cache.flushTime", description="缓存的刷新时间", defaultValue="0")
private static long cacheFlushTime;
Config标注中可以设置3个属性
name,用于指定此属性与哪个名称的配置绑定
defaultValue,当配置未设置时使用的默认值
description,配置的说明
3.3.2配置与方法绑定
如果配置变化时,需要执行一些额外的操作。或需要对配置的值进行特殊的转换,可以将配置与一个静态方法绑定。
如:
@Config(name="emap.whiteList", description="白名单列表")
static void setWhiteList(String names)
{
…;
Set<String> whiteSet = …;
}
注:所绑定的方法只能且必须有一个参数,类型必须是String
3.3.3应用中配置文件的位置
应用中的配置文件app.properties在开发环境中,可直接放在在src目录下,如果是部署环境,需要放在classes目录下。
注:应用中必须存在app.properties文件,否则所有的Config标注将不会生效。
3.3.4配置的优先级
应用中需要使用的配置信息可以设置在应用自己的配置文件(app.properties)中,也可以设置在系统的配置文件(ROOT/emap.properties)中。如果两个地方都设置了相同的配置,则应用中配置的值生效。
如果希望在应用的配置文件中设置默认值,但如果系统的配置文件中相同的配置项能够优先生效,则可以在应用的配置文件中增加如下配置:
_parentFirst.propertyNames=name1,name2
可以设置哪些配置的名称是系统配置优先生效,多个配置的名称间使用“,”分隔。
3.3.5配置信息的查看
访问地址为:/[root]/eterna/config.jsp?appName=[app]
[root]是EMAP运行环境的上下文根
[app]是需要查看配置信息的应用名称
注:此页面不仅可查看配置信息,也可作为配置项的说明文档。
3.3.6配置文件的继承
项目部署的时候会经常遇到需要修改配置的问题,比如开发环境中配置的一些文件目录和现场环境中的文件目录不一致,开发环境中的一些环境参数(如:redis)和现场环境的参数不一致等。
对这种问题也有简单的解决办法,就是现场环境的配置文件不更新。这对已经完成的项目可以这么做,但对于需要不断迭代升级的项目,一旦新增了某个配置项,或者某个通用的配置项进行了调整。那就需要在部署时更新现场的配置文件,这就增加了对部署人员的要求以及沟通的成本。
如果你使用了EMAP的配置框架,那你就能避免这些问题。
处理方式如下,在ROOT/emap.properties文件中添加如下配置:
_child.properties=../special.properties
此设置表示,为当前的配置文件指定一个子配置文件,子配置文件中的设置会覆盖掉当前文件中的同名配置。
举个例子:
如果在ROOT/emap.properties文件中有配置“temp.dir=D:\temp”用于设置临时目录在D盘的temp目录下。
如果现场环境的临时目录不在这里,可以不需要改动ROOT/emap.properties,而是在special.properties文件中配置“temp.dir=/opt/temp”,这样系统的临时目录就被改到了opt目录下的temp目录中。
这样,各个现场只需要在special.properties文件中设置与当前部署环境相关的配置项,此文件不随产品的发布进行更新,而那些通用的配置项仍然设置在ROOT/emap.properties文件中和产品一起更新。