一种属性配置文件的生成方法和解析方法与流程

文档序号:26101462发布日期:2021-07-30 18:12阅读:73来源:国知局
一种属性配置文件的生成方法和解析方法与流程

本申请实施例涉及信息处理领域,尤指一种属性配置文件的生成方法和解析方法。



背景技术:

每个系统都有一个或者多个属性配置文件,所谓属性配置文件,就是以key-value形式组织的配置所形成的文件,其中,key代表一个属性,value代表这个属性所对应的值,一个或多个配置集中在一起,就形成了属性配置文件,如ini格式的配置文件等。

一个大型项目中往往有较多的属性配置,如数据库服务属性配置、高速缓存服务属性配置、消息队列服务属性配置等,因此系统配置的数量可能达到几十条,甚至几百条。不仅如此,一个系统往往要兼容使用不同的数据库、不同的高速缓存服务、不同的消息队列。针对每种不同的服务,都有不同的配置,系统管理维护人员要根据不同的配置编写不同的配置文件,工作量巨大且繁琐。在实际工作中,由于上述原因,系统管理维护人员经常改错或者改漏,直接导致系统出现故障,研发团队需要花费大量时间和精力来定位和分析问题,给项目进度和项目成果带来很大干扰和风险。



技术实现要素:

为了解决上述任一技术问题,本申请实施例提供了一种属性配置文件的生成方法和解析方法。

为了达到本申请实施例目的,本申请实施例提供了一种属性配置文件的生成方法,包括:

获取同一服务在不同业务场景下的属性配置信息;

为每种业务场景生成包括各自属性配置信息对应的配置段,其中每个配置段包括允许读取该配置段中属性配置信息所需满足的第一判断条件;

利用每种业务场景对应的配置段以及预先设置的连接词,得到所述服务对应的属性配置文件,其中所述连接词用于在执行完一个配置段中的第一判断条件后触发对下一个配置段中第一判断条件的执行。

一种属性配置文件的解析方法,包括:

获取采用上文所述的方法生成的属性配置文件;

将预先接收的目标业务场景的特征信息与所述属性配置文件中配置段的条件信息进行匹配,得到所述目标业务场景的配置段;

从所述目标业务场景的配置段读取属性配置信息。

一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上文所述的方法。

一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上文所述的方法。

上述技术方案中的一个技术方案具有如下优点或有益效果:

获取同一服务在不同业务场景下的属性配置信息,为每种业务场景生成包括各自属性配置信息对应的配置段,其中每个配置段包括允许读取该配置段中属性配置信息所需满足的第一判断条件,利用每种业务场景对应的配置段以及预先设置的连接词,得到所述服务对应的属性配置文件,用一个属性配置文件中的条件信息控制服务在不同业务场景的配置,简化了属性配置文件的编写工作量,减少出错的概率,提高了工作效率。

本申请实施例的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请实施例而了解。本申请实施例的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。

附图说明

附图用来提供对本申请实施例技术方案的进一步理解,并且构成说明书的一部分,与本申请实施例的实施例一起用于解释本申请实施例的技术方案,并不构成对本申请实施例技术方案的限制。

图1为本申请实施例提供的属性配置文件的生成方法的流程图;

图2为本申请实施例提供的属性配置文件的解析方法的流程图;

图3为本申请实施例提供的属性配置文件的解析方法的另一流程图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚明白,下文中将结合附图对本申请实施例的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请实施例中的实施例及实施例中的特征可以相互任意组合。

图1为本申请实施例提供的属性配置文件的生成方法的流程图。如图1所示,所述方法包括:

步骤101、获取同一服务在不同业务场景下的属性配置信息;

在一个示例性实施例中,该服务可以为数据库服务、高速缓存服务或消息队列服务等。以数据库服务为例,业务场景可以为不同数据库厂家的数据库配置,或者,可以为同一数据库厂家的不同集群访问方式的数据库配置。

步骤102、为每种业务场景生成包括各自属性配置信息对应的配置段,其中每个配置段包括允许读取该配置段中属性配置信息所需满足的第一判断条件;

在一个示例性实施例中,属性配置文件可以采用编程语言进行设计,且每个业务场景下对应的配置段相互独立,每个业务场景下的配置段中属性配置信息的是在条件信息得到满足时才能够读取的。

步骤103、利用每种业务场景对应的配置段以及预先设置的连接词,得到所述服务对应的属性配置文件,其中所述连接词用于在执行完一个配置段中的第一判断条件后触发对下一个配置段中第一判断条件的执行。

在一个示例性实施例中,通过连接词将每个业务场景的配置段结合在一起,可以得到该服务的属性配置文件,能够适用于不同业务场景的应用。

本申请实施例提供的方法,获取同一服务在不同业务场景下的属性配置信息,为每种业务场景生成包括各自属性配置信息对应的配置段,其中每个配置段包括允许读取该配置段中属性配置信息所需满足的条件信息,利用每种业务场景对应的配置段,得到所述服务对应的属性配置文件,用一个属性配置文件中的条件信息控制服务在不同业务场景的配置,简化了属性配置文件的编写工作量,减少出错的概率,提高了工作效率。

下面对本申请实施例提供的方法进行说明:

在一个示例性实施例中,所述第一判断条件为预设的关键字的取值是否为该配置段对应的业务场景的标识;

如果关键字的取值满足当前配置段中的第一判断条件,允许读取当前配置段中的属性配置信息,流程结束;

如果关键字的取值不满足当前配置段中的第一判断条件,执行与下一个配置段中的第一判断条件的比对,以此类推,直到出现第一判断条件成立的配置段或对全部配置段中的判断条件均执行完成,流程结束。

与相关技术中采用顺序方式处理属性配置文件不同,本申请实施例提供的方法在属性配置文件中针对不同业务场景引入了条件表达式,把顺序处理变为有条件处理,可以实现根据条件可以动态选择配置段的目的。

在一个示例性实施例中,对于属性配置文件中至少两个配置段,采用条件表达式中的字符if作为第一个配置段中第一判断条件的起始信息,并采用字符elseif作为第二配置段中第一判断条件的起始信息,以此类推,直到最后一个配置段中设置字符else,其中字符else后的内容作为不满足全部第一判断条件后所需执行的操作,并以字符endif结束。

下面以具体应用实例进行说明:

if=(${db.type}=='databasetype1')

jdbc.driver=databasetype1driver

elseif=(${db.type}=='databasetype2')

jdbc.driver=databasetype2driver

else=

jdbc.driver=databasetype3driver

endif=

从上述实例可看成,本申请实施例提供的属性配置文件在相关技术中的属性配置文件的基础上添加4个关键字:if,endif,elseif,else。其中,每个条件语句必须以if开始,endif结束,中间可以插入elseif和else,以实现连续的多次分支判断。其中:

if关键字对应的值为条件表达式计算的结果,即if=条件表达式,或者if(条件表达式)。如if=true,if=a>b等语法格式。

endif关键字对应的值为空,可以定义为endif=,或者endif。

elseif关键字对应的值为条件表达式计算的结果,即elseif=条件表达式,或者elseif(条件表达式)。如elseif=false,elseif=c!=1,或者elseif=(c!=1)。

else关键字对应的值为空,可以定义为else=,或者else。

在一个示例性实施例中,每个配置段中属性配置信息采用关键字和取值的表达方式对属性名称和属性取值进行记录

从上述实例中可看成,每个关键字对应一个key,在不同的条件表达式中,同一key的valu的值不同。表达式和key-value中的value可以引用其他key,引用其他key的格式为${key},也可以定义为其他格式,如[key],*(key)等等,${key}代表的就是key对应的值。

整个配置文件都用key=value的形式配置,可以简化配置文件的解析,在原有配置文件解析的基础上添加对预定义关键字的处理。

在一个示例性实施例中,其中,所述记录有两种取值不同的属性配置信息设置有第二判断条件,所述第二判断条件用于判断外部约束信息是否满足记录当前取值的属性配置组合的约束条件;

如果外部约束信息满足当前属性配置组合的第二判断条件,允许读取属性配置组合中的属性配置信息,流程结束;

如果外部约束信息不满足当前属性配置组合的第二判断条件,执行与下一种属性配置组合中的第二判断条件的比对,以此类推,直到出现第二判断条件成立的属性配置组合或对全部属性配置组合中的第二判断条件均执行完成,流程结束。

本申请实施例提供的方法在同一个业务场景的属性配置信息中针对不同约束信息引入了条件表达式,可以实现根据条件可以动态选择不同取值的属性配置信息的目的。

在一个示例性实施例中,对于同一个业务场景的多种属性配置组合,将字符if作为第一种属性配置组合中第二判断条件的起始信息,并采用字符elseif作为第二种属性配置组合中第二判断条件的起始信息,以此类推,直到在最后一种属性配置组合中设置字符else,其中字符else后的内容作为不满足全部第二判断条件后所需执行的操作,并以字符endif结束。

在一个示例性实施例中,采用预设的符号进行条件表达式的描述,用以表示所使用的判断条件中的取值的大小关系和运算方式,包括:

==:两个值相等为true

!=:两个值不等为true

>:左边的值大于右边为true

>=:左边的值大于或者等于右边为true

<:左边的值小于右边为true

<=:左边的值小于或者等于右边为true

||:左右两边的表达式有一个为true就为true

&&:左右两边的表达式全部为true就为true

图2为本申请实施例提供的属性配置文件的解析方法的流程图。如图2所示,所述方法包括:

步骤201、获取采用上文任一所述的方法生成的属性配置文件;

步骤202、将预先接收的目标业务场景的特征信息与所述属性配置文件中配置段的条件信息进行匹配,得到所述目标业务场景的配置段;

步骤203、从所述目标业务场景的配置段读取属性配置信息。

本申请实施例提供的方法,通过获取属性配置文件,并将预先接收的目标业务场景的特征信息与所述属性配置文件中配置段的条件信息进行匹配,得到所述目标业务场景的配置段,再从所述目标业务场景的配置段读取属性配置信息,实现利用服务的属性配置文件完成对多种业务场景的属性的配置,提高属性配置文件的适用范围。

下面对本申请实施例提供的方法进行说明:

在一个示例性实施例中,所述将预先接收的目标业务场景的特征信息与所述属性配置文件中配置段的条件信息进行匹配,得到所述目标业务场景的配置段,包括:

读取所述属性配置文件中第一个配置段中的第一判断条件;

判断所述目标业务场景的特征信息是否满足所述第一个配置段中的第一判断条件;

如果所述目标业务场景的特征信息满足所述第一个配置段中的第一判断条件,则读取所述第一配置段中属性配置信息的记录,流程结束;

如果所述目标业务场景的特征信息不满足所述第一个配置段中的第一判断条件,判断所述目标业务场景的特征信息是否满足第二个配置段的第一判断条件,以此类推,直到满足第一判断条件成立的配置段出现或对全部配置段中的判断条件均执行完成,流程结束。

在上述示例性实施例中,通过条件表达式来控制属性解析对应的配置段。在进行属性解析时,先获取一个或多个预设的关键词,该关键词用于与第一判断条件进行比对。如果条件表达式为true,则解析器将对后续属性进行解析,如果为false,则不解析后续属性。

相关技术中属性配置文件都是以key-value形式存在,顺序解析,没有分支控制,存在大量冗余配置和已屏蔽配置。本申请实施例为相关技术中的属性配置文件提供了配置解析分支处理功能,可以根据已经解析出来的属性来控制后续哪些属性还要解析。

基于每个配置段中的第一判断条件进行判断操作,可以确定当前解析操作所需使用的配置段,从而有针对性的获取对应业务场景下的属性配置信息,实现有选择性的解析,与相关技术中采用顺序解析配置文件相比,有效提高了解析效率。

在一个示例性实施例中,所述从所述目标业务场景的配置段读取属性配置信息,包括:

如果同一个业务场景下属性配置信息包括不同外部约束条件所对应的至少两种取值不同的属性配置组合,则读取所述属性配置信息中第一种属性配置组合中的第二判断条件;

判断预先接收的目标约束条件是否满足所述第一种属性配置组合中的第二判断条件;

如果所述目标约束条件满足所述第一种属性配置组合中的第二判断条件,则读取所述第一种属性配置组合中属性配置信息,流程结束;

如果所述目标约束条件不满足所述第一种属性配置组合中的第二判断条件,继续判断预先接收的目标约束条件是否满足所述第二种属性配置组合中的第二判断条件以此类推,,直到能满足第二判断条件成立的属性配置组合出现或对全种属性配置组合中的第二判断条件均执行完成,流程结束。

基于每种属性配置组合中的第二判断条件进行判断操作,可以确定当前解析操作所需使用的属性配置组合,从而有针对性的获取不同约束信息对应的属性配置组合,实现有选择性的解析。

在一个示例性实施例中,如果采用条件表达式中的字符if、elseif、else以及endif来表达判断条件,则执行如下解析操作,包括:

以关键词为if查找所述属性配置文件,得到字符if后的判断条件;

如果字符if后的判断条件成立,则将if后的判断条件后至字符elseif、else或endif之前的字符作为属性配置信息的提取对象进行解析操作;

如果字符if后的判断条件不成立,则以关键字为elseif查找所述属性配置文件,得到第一个出现的字符elseif,并获取该第一出现的字符elseif后的判断条件;

如果第一出现的字符elseif后的判断条件成立,则将elseif后的判断条件后至字符else或endif之前的字符作为属性配置信息的提取对象进行解析操作;

如果第一出现的字符elseif后的判断条件不成立,则查找得到第二个出现字符elseif后的判断条件,并继续进行判断操作,直到字符elseif后的判断条件成立;

如果直到最后一个字符elseif后的判断条件也不成立,则以关键字为else为关键字查找所述属性配置文件,得到字符else的位置,将字符else后至字符endif之前的内容作为属性配置信息的提取对象进行解析操作。

在下述实施例中,属性配置信息采用key-value的形式进行描述,所使用的条件表达式也采用key-value,即,if、elseif、else和endif作为key,所使用的判断条件作为value,与属性配置文件中属性配置信息的记录方式保持一致,方便数据解析。

图3为本申请实施例提供的属性配置文件的解析方法的另一流程图。如图3所示,所述方法包括:

设置初始运行状态标记runtag=run,设置if执行标记ifexetag=false;

步骤301、读取配置文件中的一行的内容;

步骤302、判断所读取的内容是否是注释;

其中,注释内容是以字符“#”开头的内容;

如果所读取的内容是注视,则执行步骤301;否则,执行步骤304;

步骤303、从代码信息中解析出属性名称和属性值;

如果属性值为对其他key的引用(${key}),则获取被引用的key的属性值,替换为该key对应的value;

步骤304、如果key为if,把value当中表达式,计算value结果;

如果if语句的value结果为false,设置语句执行标记runtag=run,否则设置runtag=skip;

如果if到endif之间只能有一段被执行,如果runtag=run,设置if执行标记ifexetag=true,返回步骤301;

步骤305、如果key不为if,判断key是否为elseif;

如果key是elseif,判断ifexetag是否为true,如果为true,表示if已经执行过了,后续语句都要跳过,设置runtag=skip,返回步骤301

计算elseif的值,value为false,设置语句执行标记runtag=run,否则设置runtag=skip,如果runtag=run,设置if执行标记ifexetag=true,返回到1

步骤306、如果key不是elseif,判断key是否为else;

如果是else,判断ifexetag是否为true,如果为true,if已经执行了,runtag=skip,否则runtag=run,返回步骤301;

步骤307、如果key不是else,判断key是否为endif

如果是endif,后续语句恢复正常,runtag=run,ifexetag=false,返回步骤301;

如果不是endif,说明是一个普通的key,则执行步骤308;

步骤308、判断运行状态runtag的取值是否为true

如果runtag==false,跳过这个key处理,返回步骤301;

如果runtag==true,则执行步骤309;

步骤309、将key和对应的value保存到对应的hash结构中,并返回步骤301。

从上述流程可知,在属性配置文件中预定义了4个关键字:if、elseif、else、endif,通过key=value的形式定义语法规则,实现对判断条件的设置,实现动态选择配置段的目的。另外,在条件表达式中引用已经解析出的key的值机制,通过解析器动态替换值,实现对不同判断条件的比对。

基于上述内容可知,本申请实施例提供了一个高效的、快速的配置文件读取机制,且该机制与相关技术有着本质的区别。

现有配置文件的定义形式和使用方式,可以满足大多数业务场景需要,但面对比较复杂的业务时,配置就变得复杂了,既难以维护,又容易出错。例如,针对数据库的配置,既有不同数据库厂家的数据库配置,也有同一数据库厂家的不同集群访问方式的数据库配置,内容都不一样。

与相关技术不同的是,针对不同厂家的数据库,本申请实施例只需要提供一个基本的数据库厂商类型属性配置,再通过这个配置去控制选择后续哪些属性需要配置、该配置什么值。针对同一数据库厂家的不同集群访问方式,本发明只需要提供一个基本的集群方式属性配置,后续将根据这个配置再选择对应的属性配置数据。当使用不同的数据库时,系统管理维护人员只需修改数据库厂商类型就可以了,其他都不用修改。对于同一数据库厂家的不同集群访问方式,系统管理维护人员也只需要修改集群方式就可以了,其他都不用修改。在这种方式下,只需要修改属性配置文件中的少量配置,解析器将自动选择对应的其他配置项。

通过上述对比可知,相关技术中的属性配置文件与本申请实施例提供的属性配置文件有如下区别:

区别1:相关技术中的属性配置文件是一系列的key-value对组成,不具备条件处理功能,都是一种顺序处理;本申请实施例提供的属性配置文件中引入了条件处理语句和条件表达式,并定义了一个解析器,把顺序处理变为有条件处理;

区别2:相关技术中的属性配置文件采用顺序处理,如果有多种配置需要选择,通常采用注释打开/关闭的方式,如果需要该配置就把注释关闭,如果不需要该配置就把注释打开,这种方式操作起来比较繁琐,远没有条件处理来得灵活。而本申请实施例提供的方式是基于条件是否成立来动态选择配置段,使用更加灵活,操作简单。

本申请实施例提供一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上文任一项中所述的方法。

本申请实施例提供一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上文任一项中所述的方法。

本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于ram、rom、eeprom、闪存或其他存储器技术、cd-rom、数字多功能盘(dvd)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1