CN115878222A - 对象处理方法、装置、电子设备及可读存储介质 - Google Patents
对象处理方法、装置、电子设备及可读存储介质 Download PDFInfo
- Publication number
- CN115878222A CN115878222A CN202211638029.3A CN202211638029A CN115878222A CN 115878222 A CN115878222 A CN 115878222A CN 202211638029 A CN202211638029 A CN 202211638029A CN 115878222 A CN115878222 A CN 115878222A
- Authority
- CN
- China
- Prior art keywords
- configuration
- refreshed
- configuration information
- cache pool
- class
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供了一种对象处理方法、装置、电子设备及可读存储介质。该方法包括:在接收到刷新请求的情况下,获取待刷新对象的当前配置信息,根据当前配置信息为待刷新对象生成刷新后的配置对象,得到已刷新对象。将已刷新对象加入缓存池,并清除待刷新对象。其中,待刷新对象属于缓存池中的配置对象,缓存池中的配置对象包括已注入配置信息的类对象,服务端用于向请求方提供缓存池中的配置对象。这样,在请求方请求待刷新对象时,无需等待可以直接读取缓存池中的该待刷新对象并提供给请求方,进而可以降低向请求方提供配置对象的耗时。
Description
技术领域
本发明涉及网络技术领域,特别是涉及一种对象处理方法、装置、电子设备及可读存储介质。
背景技术
目前,配置信息往往会通过对象的方式实现。例如,针对配置信息创建配置对象,向请求方提供配置对象,使得请求方需要配置信息中具体的配置值时,可以基于该配置对象获得配置值。由于配置信息会发生变动,因此,经常需要对配置对象进行刷新。
现有技术中,往往是先销毁对应的配置对象,然后才根据当前配置信息重新生成配置对象。因此,在生成对象的创建过程中无法读取配置对象,需要等待重新生成好配置对象之后,才能正常读取到配置对象。这种方式中,会导致向请求方提供配置对象的耗时较长。
发明内容
本发明实施例的目的在于提供一种对象处理方法、装置、电子设备及可读存储介质,以实现降低向请求方提供配置对象的耗时的技术目的。具体技术方案如下:
在本发明实施的第一方面,首先提供了一种对象处理方法,应用于服务端,该方法包括:
在接收到刷新请求的情况下,获取待刷新对象的当前配置信息;所述待刷新对象属于缓存池中的配置对象,所述缓存池中的配置对象包括已注入配置信息的类对象,所述服务端用于向请求方提供所述缓存池中的配置对象;
根据所述当前配置信息为所述待刷新对象生成刷新后的配置对象,得到已刷新对象;
将所述已刷新对象加入所述缓存池,并清除所述待刷新对象。
在本发明实施的第二方面,还提供了一种对象处理装置,应用于服务端,该装置包括:
获取模块,用于在接收到刷新请求的情况下,获取待刷新对象的当前配置信息;所述待刷新对象属于缓存池中的配置对象,所述缓存池中的配置对象包括已注入配置信息的类对象,所述服务端用于向请求方提供所述缓存池中的配置对象;
生成模块,用于根据所述当前配置信息为所述待刷新对象生成刷新后的配置对象,得到已刷新对象;
第一加入模块,用于将所述已刷新对象加入所述缓存池,并清除所述待刷新对象。
在本发明实施的第三方面,还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现上述方法。
在本发明实施的第四方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述方法。
在本发明实施的第五方面,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得所述计算机执行上述方法。
本发明实施例中,在接收到刷新请求的情况下,获取待刷新对象的当前配置信息,根据当前配置信息为待刷新对象生成刷新后的配置对象,得到已刷新对象。接着,将已刷新对象加入缓存池,并清除待刷新对象。其中,待刷新对象属于缓存池中的配置对象,缓存池中的配置对象包括已注入配置信息的类对象,服务端用于向请求方提供缓存池中的配置对象。由于在对缓存池中的配置对象进行刷新时,是在生成了已刷新对象之后,将已刷新对象加入缓存池,才清除缓存池中原来的待刷新对象。这样,在生成已刷新对象的过程中,由于缓存池中存在待刷新对象且服务端是向请求方提供缓存池中的配置对象。因此,在请求方请求待刷新对象时,无需等待可以直接读取缓存池中的该待刷新对象并提供给请求方,进而可以降低向请求方提供配置对象的耗时。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1为本发明实施例中的一种对象处理方法的步骤流程图;
图2是本发明实施例提供的一种整体流程示意图;
图3为本发明实施例中的一种对象处理装置的结构图;;
图4为本发明实施例中的一种电子设备的示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。
图1为本发明实施例中的一种对象处理方法的步骤流程图。该方法可以应用于服务端,如图1所示,该方法包括:
步骤101、在接收到刷新请求的情况下,获取待刷新对象的当前配置信息;所述待刷新对象属于缓存池中的配置对象,所述缓存池中的配置对象包括已注入配置信息的类对象,所述服务端用于向请求方提供所述缓存池中的配置对象。
本发明实施例中,缓存池可以是预先设置的用于存放配置对象的缓存,缓存池本质上可为一个缓存对象。配置信息也可以为云配置信息,称为云配或者云配数据。其中,云配置信息可以是在配置中心中为微服务项目中的各微服务定义的相应配置,配置中心也可以称为服务端。配置中心中的云配置信息可以以提供给客户端使用。配置信息中可以包括配置的字段以及字段值,该字段值即为配置值。配置对象也可以称为云配对象,其本质上可以为Bean对象,因此,也可以称为云配Bean对象。配置信息本质上可以理解为Java中的类对象,类对象中可以定义有配置信息中的字段,通过向该类对象注入配置信息,即,将配置信息中的配置值填充类对象中的字段值,即可得到配置对象。示例性地,字段可以为“开始时间”,字段值可以为10:00。那么注入配置信息可以指的是为类对象中的“开始时间”字段赋值:10:00。
刷新请求可以是用于指示对配置对象进行刷新的请求,示例性地,刷新请求可以是在配置信息发生变更的情况下发出的,或者是,周期性发出的,本发明实施例对此不作限制。待刷新对象可以是缓存池中的部分或全部配置对象。可以从存储配置信息的对象中,获取该待刷新对象当前的配置信息,作为该待刷新对象的当前配置信息。当前配置信息可以表征该待刷新对象目前最当前配置信息。
进一步地,请求方可以是需要使用配置对象的主体,例如,请求方可以是需要使用配置对象的接口。示例性地,假设接口A用于实现判断当前是否开启指定功能。在用户调用接口A时,接口A需要获取“开始时间”这一配置信息对应的配置对象X,然后从该配置对象X中获取其中的“开始时间”的字段值,根据当前时间以及获取到的“开始时间”的字段值,确定当前是否开启指定功能。例如,在当前时间未达到开始时间的情况下,确定不开启指定功能。在当前时间达到开始时间的情况下,确定开启指定功能。
相应地,服务端具体可以是从缓存池中获取请求方所需的配置对象,并提供给请求方。
步骤102、根据所述当前配置信息为所述待刷新对象生成刷新后的配置对象,得到已刷新对象。
本申请实施例中,已刷新对象可以是注入当前配置信息的类对象。相应地,可以从类对象存储区域中加载该待刷新对象的类对象,并为该类对象中注入当前配置信息,即,使用当前配置信息中的配置值填充该类对象中的字段值,即可得到已刷新对象。其中,已刷新对象中填充的字段值与缓存池中的待刷新对象中填充的字段值存在差异,其他内容可以均相同,例如,类对象的组成代码、其中定义的字段名可以均相同。或者,定义的字段名也可以存在差异。
步骤103、将所述已刷新对象加入所述缓存池,并清除所述待刷新对象。
示例性地,在生成已刷新对象之后,可以执行将已刷新对象加入缓存池的操作。同时,可以周期性执行检测已刷新对象是否成功加入缓存池的操作,例如,可以在检测到缓存池中存在对象标识与该待刷新对象的对象标识一致的对象的情况下,确定已刷新对象成功加入缓存池。反之,则可以确定已刷新对象未成功加入缓存池,相应地,可以等待下一检测周期到来时继续检测,直至检测到已刷新对象成功加入缓存池。进一步地,在检测到已刷新对象成功加入缓存池的情况下,执行清除待刷新对象的操作,即,将原来的待刷新对象从缓存池中删除。
相较于现有技术中,在生成对象的创建过程中不存在可以读取的被刷新的配置对象,进而只能进行等待的方式。本发明实施例中,由于在生成已刷新对象的过程中,缓存池中的待刷新对象并未被销毁,相应地,如果请求方需要该待刷新对象,由于缓存池中依旧存在该待刷新对象,因此,可以确保能够直接从缓存池中读取到当前的待刷新对象,无需等待生成好已刷新对象即可向请求方提供该待刷新对象,进而缩短耗时。在已刷新对象被加入缓存池之后,已刷新对象中定义的当前配置信息生效。
综上所述,本发明实施例提供的对象处理方法,在接收到刷新请求的情况下,获取待刷新对象的当前配置信息,根据当前配置信息为待刷新对象生成刷新后的配置对象,得到已刷新对象。接着,将已刷新对象加入缓存池,并清除待刷新对象。其中,待刷新对象属于缓存池中的配置对象,缓存池中的配置对象包括已注入配置信息的类对象,服务端用于向请求方提供缓存池中的配置对象。由于在对缓存池中的配置对象进行刷新时,是在生成了已刷新对象之后,将已刷新对象加入缓存池,才清除缓存池中原来的待刷新对象。这样,在生成已刷新对象的过程中,由于缓存池中存在待刷新对象且服务端是向请求方提供缓存池中的配置对象。因此,在请求方请求待刷新对象时,无需等待可以直接读取缓存池中的该待刷新对象并提供给请求方,进而可以降低向请求方提供配置对象的耗时。
可选地,本发明实施例中还可以包括下述步骤:
步骤201、响应于所述请求方发送的对象获取请求,从所述缓存池中查找所述对象获取请求所请求的配置对象,作为目标配置对象。
步骤202、在查找到所述目标配置对象的情况下,向所述请求方返回所述目标配置对象,以供所述请求方从所述目标配置对象中获取目标配置值。
针对上述步骤201~步骤202,对象获取请求可以是请求方在需要目标配置对象的情况下发送的。对象获取请求所请求的配置对象可以是上述的待刷新对象,相应地,即使对象获取请求所请求的配置对象是待刷新对象,由于无需等待生成已刷新对象,因此,也可以避免因为等待,导致耗时较长的问题。当然,对象获取请求所请求的配置对象也可以是除待刷新对象之外的配置对象。
进一步地,目标配置值可以是目标配置对象中请求方所需的字段名的字段值。在查找到目标配置对象后,可以将目标配置对象发送给请求方。请求方可以通过调用指定方法从目标配置对象中获取目标配置值。示例性地,该指定方法可以为java定义类里面的字段(例如,startTime字段)对应的getStartTime()方法。
本发明实施例中,响应于请求方发送的对象获取请求,从缓存池中查找对象获取请求所请求的配置对象,作为目标配置对象。在查找到目标配置对象的情况下,向请求方返回目标配置对象,以供请求方从目标配置对象中获取目标配置值。由于缓存池中的配置对是已注入配置信息的类对象,因此,可以在查找到目标配置对象的情况下,直接向请求方返回目标配置对象。相较于在请求方请求时,才根据配置信息初始化配置对象(即,注入配置信息)的方式,这样,可以进一步降低向请求方提供配置对象的耗时,进而避免请求方不可用的问题。
可选地,在一种实现方式中,本申请实施例还可以包括下述步骤:
步骤301、在启动环节,根据预定义路径扫描带有第一指定注解的类对象。
其中,预定义路径可以是预先指定的扫描路径,示例性地,预定义路径可以包括预先配置的云配扫描地址、携带第一注解的类上面定义的第二注解中定义的路径、或者,携带第三注解的类的包名中定义的路径。其中,第一注解的名称可以为:SpringBootApplication,第二注解的名称可以为:ComponentScans或ComponentScan的,第三注解的名称可以为:SpringBootApplication。这些路径可以是需要扫描的对象所在的路径。具体的,可以将这些预定义路径作为待扫描路径,扫描这些路径下面带第一指定注解的类。其中,第一指定注解可以是预先设置的,示例性地,第一指定注解可以包括“XiuConfigurationProperties”。其中,“XiuConfigurationProperties”可以用于标识类对象,方便类对象能够被扫描到。
需要说明的是,还可以将代码中类对象具备的注解:“ConfigurationPropertiesScan”替换为预定义路径,使得这些类对象能过被扫描到。
在一种实现方式中,本发明实施例可以是基于Spring框架实现的,可以预先将类对象上面的“Component”、“RefreshScope”、“ConfigurationProperties”注解全部删除,并替换为”XiuConfigurationProperties”一个注解,进而确保能扫描到我们所需的对象,同时,避免代码改动量太大。
步骤302、根据各所述类对象的路径标识以及各配置信息的路径标识,从配置信息提供方中获取各所述类对象对应的配置信息,并为各所述类对象注入获取到的配置信息,得到各所述类对象对应的配置对象;所述类对象的路径标识是基于所述类对象的第二特定注解确定的。
本步骤中,配置信息提供方可以是云配管理端,云配管理端可以使用云配信息来管理各种可能需要变动的配置,例如,推荐规则、活动规则、聊天室进出消息等配置。其中,一种配置信息作为一个文件,例如,将与推荐规则有关的配置信息作为一种配置信息,将与活动规则有关的配置信息作为一种配置信息,针对一个文件可以对应创建至少一个云配对象。
进一步地,路径标识可以为云配路径前缀,云配路径前缀可以是预先定义的扫描路径中的前缀部分。类对象对应的配置信息可以是预先定义的,示例性地,可以为类对象及其对应的配置信息设置相同的云配路径前缀,这样,可以基于云配路径前缀确定类对象对应的配置信息。第二特定注解可以是预先设置的,示例性地,第二指定注解可以与前述第一指定注解相同,相应地,类对象的云配路径前缀可以由该类对象的上面的“XiuConfigurationProperties”注解提供。当然,第二指定注解也可以与前述第一指定注解不同,本发明实施例对此不作限制。
可选的,配置信息提供方提供的环境变量中预先存储有配置信息以及配置信息的路径标识,配置信息与配置信息的路径标识对应存储。对于任一类对象,可以从环境变量中获取对应的路径标识与类对象的路径标识一致的配置信息,得到类对象对应的配置信息。
具体的,可以将类对象的路径标识与环境变量中存储各配置信息的路径标识进行比对,如果两者一致,则可以将该配置信息作为该类对象对应的配置信息。需要说明的,配置信息可以预先被刷新到系统的环境变量中,具体的,环境变量中可以以配置信息的路径标识作为键名(key),以配置信息作为键值(value)进行存储,从而方便根据路径标识匹配将配置信息注入到某个对象中。示例性地,假设AudioCdnProperties的类对象的前缀是“env.audio-cdn”,可以根据“env.audio-cdn”前缀查找对应的配置信息,并将查找到的配置信息注入到AudioCdnProperties的类对象的字段中。为各类对象注入获取到的配置信息,可以具体是利用各类对象对应的配置信息,填充类对象中的字段值,填充结束之后,即可得到各类对象对应的配置对象。
步骤303、将各所述类对象对应的配置对象均加入所述缓存池。
本发明实施例中,还可以为缓存池中的每个配置对象增加携带指定标识的用于指示对配置对象进行加载的注解。其中,该指定标识可以用于表示本方案中需要处理配置对象,指定标识的具体形式可以根据实际需求设置,例如,指定标识可以为“Xiu”。相应地,携带指定标识的用于指示对配置对象进行加载的注解可以为:“EnableXiuConfigurationProperties”。这样,由于用于指示对配置对象进行加载的注解中携带有本方案中设置的指定标识,因此可以方便能够在代码中单独引入本方案的配置对象。且避免缓存池中的配置对象被外部的云配功能识别加载。需要说明的是,本发明实施例中还可以在不兼容的配置对象中添加注解:“@AutoWired”,以方便服务端识别。
本发明实施例中,通过在启动环节,根据预定义路径扫描带有第一指定注解的类对象,从配置信息提供方中获取各类对象对应的配置信息,并为各类对象注入获取到的配置信息,得到各类对象对应的配置对象。最后,将各类对象对应的配置对象均加入缓存池。这样,一定程度上可以使得缓存池中具备充足的配置对象,进而方便向请求方提供配置对象。
可选地,在一种实现方式中,本申请实施例还可以包括下述步骤:
步骤401、在存在未成功加入所述缓存池中的配置对象的情况下,拒绝所述对象获取请求。
本发明实施例中,可以进行服务监控,增加对所有配置对象的健康检查,具体的,在一个类对象对应的配置对象加入缓存池后,对应设置一个标志,例如,设置UP标志。具体的,可以根据同一个scope作用域(例如,XiuCustomScope类文件、名称为xiucustom的作用域)下定义的云配对象注册定义,主动去获取这些定义好的云配对象,这样Spring就会自动去获取对应的Bean对象,进而进入:缓存中不存在就创建云配对象,存在就直接返回云配对象的处理流程中。这样每个定义的云配对象都获取完以后,相当于完成了对作用域下定义的云配对象的初始化。相应地,云配对象对应的服务状态就会被设置为UP,否则默认是DOWN。进一步地,只要是存在Down,那么监控检查就可以认为服务未启动成功。
在存在未成功加入缓存池中的配置对象的情况下,确定服务未启动成功,可以不对外提供服务,这样外部请求就不会提前进来。相应地,这种情况下可以拒绝接收到的对象获取请求。进而确保响应对象获取请时,配置对象均已完成初始化,进而降低耗时。
相应地,上述步骤201响应于所述请求方发送的对象获取请求,从所述缓存池中查找所述对象获取请求所请求的配置对象,具体可以包括:
子步骤2011、在将各所述类对象对应的配置对象均成功加入所述缓存池后,响应于所述对象获取请求,从所述缓存池中查找所述对象获取请求所请求的配置对象。
在均成功加入缓存池中的情况下,说明已经提前创建好云配对象,服务已经是正常启动。因此,可以对外提供服务。且由于是根据从配置信息提供方中获取的配置信息创建的配置对象,因此,缓存池中当前的配置对象相当于是刷新得到的最新的配置对象,进而可以更大程度确保配置对象的有效性。
本发明实施例中,在各类对象对应的配置对象均成功加入缓存池之后,才响应于所述对象获取请求,从所述缓存池中查找所述对象获取请求所请求的配置对象,即,在各类对象对应的配置对象均成功加入缓存池之后才对外提供服务,进而可以确保向外提供云配对象的效率,尽可能避免所请求的云配对象还未加入缓存池,导致的向请求方提供云配对象的耗时较长的问题。
可选地,在一种实现方式中,本申请实施例还可以包括下述步骤:
步骤501、预先注册各所述配置对象的定义信息。
具体的,可以在启动环节进行注册,定义信息也可以称为Bean定义。可以预先注册配置对象的相关信息,其中,相关信息可以包括对象标识(例如,云配路径前缀)、类信息。其中,类信息可以指示一个java的类对象,即,该配置对象对应的类对象,该配置对象以及其对应的类对象的云配路径前缀相同。通过为该类对象注入对应的配置信息,即可得到该配置对象。
需要说明的是,上述云配路径前缀以及类信息可以与配置对象位于同一缓存中,可以基于第一预设类对象。
例如,“XiuConfigurationPropertiesCache”对象来管理该缓存中的云配路径前缀、类信息以及配置对象。
相应地,上述从所述缓存池中查找所述对象获取请求所请求的配置对象的操作,具体可以包括:
步骤A、将所述缓存池中各所述配置对象的定义信息中的对象标识,与所述对象获取请求携带的对象标识进行匹配。
步骤B、将对象标识与所述对象获取请求携带的对象标识相匹配的配置对象,确定为所述对象获取请求所请求的配置对象。
针对上述步骤A~步骤B,可以将对象获取请求携带的对象标识与各配置对象的对象标识进行比对,如果两者一致,则可以将该配置对象作为对象获取请求所请求的配置对象。
本申请实施例中,预先注册各配置对象的定义信息。将缓存池中各配置对象的定义信息中的对象标识,与对象获取请求携带的对象标识进行匹配。将对象标识与对象获取请求携带的对象标识相匹配的配置对象,确定为对象获取请求所请求的配置对象。这样,可以基于定义信息便捷的确定出对象获取请求所请求的配置对象,从而一定程度上提高处理效率。
可选地,如果不存在对象标识与对象获取请求携带的对象标识相匹配的配置对象,则可以确定在未查找到目标云配对象,相应地,在这种情况下,可以根据对象获取请求创建为请求方创建目标云配对象,并向请求方返回所创建的目标云配对象。这样,可以确保能够向请求方提供配置对象。具体的,可以创建类对象,然后获取云配路径前缀与对象获取请求携带的对象标识相匹配的配置信息,将该配置信息注入到该类对象中,得到目标云配对象。其中,将该配置信息注入到该类对象中的操作可以是上述第一预设类对象实现的,第一预设类对象可以在存在特定注解(例如,“PostConstrunct”)的情况下实现初始化逻辑,即,执行将该配置信息注入到该类对象中的操作。其中,创建目标云配对象可以基于双重校验的单例设计模式进行,以在多线程情况下能保持高性能。需要说明的是,第一预设类对象还可以提供获取目标配置对象的方法,即,优先从缓存池中查找,缓存池中没有查找到的情况下,则基于双重校验的单例设计模式创建目标云配对象。创建的目标云配对象还可以加入缓存池中,以便于在下次被请求时,可以直接从缓存池中获取到,进而提高后续处理效率。
可选地,在一种实现方式中,所述缓存池是与指定作用域关联的缓存。相应地,从缓存池中查找所述对象获取请求所请求的配置对象可以具体是从与所述指定作用域关联的缓存中查找所述对象获取请求所请求的配置对象。
上述步骤301在启动环节,根据预定义路径扫描带有第一指定注解的类对象,具体可以包括:
子步骤3011、基于所述指定作用域监听所述启动环节内的刷新事件。
子步骤3012、在监听到所述刷新事件的情况下,根据预定义路径扫描带有第一指定注解的类对象。
本发明实施例中,指定作用域本质上可以为Bean对象,指定作用域可以记为“XiuCustomScope”。指定作用域可以用于实现事件监听,刷新事件可以是服务端中服务快启动成功前的产生的一个事件。通过监听该刷新事件,并在监听到刷新事件的情况下,执行根据预定义路径扫描带有第一指定注解的类对象的操作,使得可以在启动环节预先将所有配置对象都加入缓存池中。指定作用域还可以用于实现获取配置对象的作用域,云配可以预先定义到这个作用域中,以方便与其他作用域区分。需要说明的是,实际应用场景中,Spring框架可以根据某个作用域去这个作用域里面获取Bean对象,其中,这些作用域内部包括与Bean对象相关的一些缓存。本发明实施例中,定义不同的作用域,可以Spring框架中之前定义好的作用域(例如,与RefreshScope之类的作用域)区分开。
需要说明的是,上述进行服务监控的操作可以基于上述指定作用域实现。
本发明实施例中,基于指定作用域监听启动环节内的刷新事件。在监听到刷新事件的情况下,根据预定义路径扫描带有第一指定注解的类对象。这样,可以及时的根据预定义路径扫描带有第一指定注解的类对象,进而将所有配置对象都加入缓存池中,方便后续获取。
可选地,在一种实现方式中,可以采用增量刷新的方式,相应地,上述步骤101获取待刷新对象的当前配置信息,具体可以包括:
子步骤1011、将发生变更的配置信息对应的配置对象作为所述待刷新对象,并获取所述发生变更的配置信息的标识。
本发明实施例中,刷新请求可以是刷新接口的调用请求。环境对象中的环境变量被更新,即,配置信息发生变更的情况下,spring框架会返回发生变更的配置信息的云配路径前缀。实际应用场景中,如果某个配置的值需要更新,就会去云配管理端修改配置信息,然后调用发布功能,以更新系统中的配置对象。
相应地,可以获取返回的这些云配路径前缀,作为发生变更的配置信息的标识。进一步地,将发生变更的配置信息对应的配置对象作为待刷新对象,具体可以是将与这些云配路径前缀匹配的配置对象确定为发生变更的配置信息对应的配置对象,即,确定为待刷新对象。
子步骤1012、将所述标识指示的配置信息确定为所述待刷新对象的当前配置信息。
本步骤中,可以从环境对象的环境变量中获取标识指示的配置信息,例如,可以将环境变量中对应的云配路径前缀与该标识一致的配置信息,作为待刷新对象的当前配置信息。其中,待刷新对象的云配路径前缀、配置信息对应的云配路径前缀一致。
进一步地,可以获取该待刷新对象的类对象,为该待刷新对象的类对象中重新注入当前配置信息,即,将该类对象中字段的字段值更新为当前配置信息中定义的值。本发明实施例中通过进行增量刷新,这样,可以在实现刷新的同时,节省处理资源。
需要说明的是,本发明实施例中,可以具体是在调用其他刷新接口,比如spring的/refresh接口的时候,进行全量刷新。进一步地,如果是调用自定义的/cumstomrefresh接口,且确定云配信息未发生变更的情况下,则不需要刷新云配对象。可选地,在另一种实现方式中,可以采用全量刷新的方式,相应地,上述步骤101获取待刷新对象的当前配置信息的步骤,具体可以包括:子步骤1012、将所有的配置对象作为所述待刷新对象,并获取所有当前配置信息,以作为所述待刷新对象的当前配置信息。
本发明实施例中,可以从环境对象的环境变量中获取所有当前配置信息。其中,所有当前配置信息即为所有配置对象的当前配置信息。对于任一待刷新对象,可以将获取到的所有当前配置信息中与该待刷新对象得类对象的云配路径前缀一致的配置信息,作为该待刷新对象的当前配置信息。针对任一待刷新对象,可以获取该待刷新对象的类对象,为该待刷新对象的类对象中注入该待刷新对象的当前配置信息。示例性地,可以在接收到刷新事件的情况下进行全量刷新。由于事件通知的情况下,往往无法获取到发生变更的配置信息的云配路径前缀,因此需要进行全量刷新。其中,刷新事件可以为“RefreshScopeRefreshedEvent”,刷新事件可以是“/refresh”接口下发的。本发明实施例中,还可以设置第二预设类对象,例如,“XiuConfigurationPropertiesRefresh”。第二预设类对象在接收到刷新事件后,可以执行全量刷新。这样,可以使得基于原有的“/refresh”接口依旧可以触发刷新。
本发明实施例中通过进行全量刷新,这样,可以确保不会遗漏,确保刷新的全面性。
需要说明的是,刷新方式可以是上述第一预设类对象提供的,第一预设类对象还可以在增量刷新完成后,根据预设参数,确定是否需要调用RefreshScope的刷新方法,即,对带有RefreshScope注解的配置对象进行刷新,以提高灵活性。进一步地,设置第三预设类对象,例如“XiuCustomRefreshEndpoint”,作为新的刷新接口(例如,“/customrefresh”)的入口类,以调用第一预设类对象的刷新云配缓存接口,进而实现刷新。
本发明实施例中的缓存池可以具体是一个“FactoryBean”对象。这样,在需要时,使得Spring框架可以根据FactoryBean对象去获取预先缓存好的配置对象,可以统一从“FactoryBean”对象中获取配置对象。使得本方案能够与Spring框架兼容。且由于会更新缓存池中的配置对象,只要更新了配置对象,即可从缓存池中获取到更新后的配置对象,因此,可以在基于“FactoryBean”对象确保能够便捷的获取到配置对象的同时,一定程度上确保能够及时获取到更新后的配置对象,避免刷新操作对向外提供配置对象的操作产生影响,进而实现无感刷新。
进一步地,还可以设置第四预设类对象,例如,“XiuConfigurationPropertiesConfigurer”,第四预设类对象可以实现上述扫描自操作,以及定义“FactoryBean”对象。需要说明的是,还可以基于第四预设类对象定义指定作用域可以记为“XiuCustomScope”,以及,设置“FactoryBean”对象采用代理模式,进而确保实时每次从“FactoryBean”对象中去获取配置对象。
进一步地,上述第一预设类对象、第二预设类对象、第三预设类对象、第四预设类对象以及指定作用域可以基于自动装配对象(例如,“XiuPropertiesAutoConfiguration”)引入,其中,自动装配对象可以是携带预设注解的对象。
例如,预设注解可以为:
“org.springframework.boot.autoconfigure.AutoConfiguration”。
可以在服务端开启时,将上述第一预设类对象、第二预设类对象、第三预设类对象、第四预设类对象以及指定作用域被加载至服务端采用的Spring框架中,进而使得服务端可以实现相应的功能。
下面结合本发明实施例的一种应用场景进行说明。目前,java项目一般采用spring框架,使用“Springcloudconfigclient”作为项目配置中心的客户端,采用统一的云配管理端如“Spring cloud config server”来管理云配置信息。接口有时需要利用配置对象来对外提供服务。但是由于现有技术在刷新时往往是先销毁对应的配置对象,因此会开启写锁后根据当前配置信息重新生成配置对象,在生成后才释放写锁。在写锁存在期间,读取配置对象的读锁会被阻塞,导致无法读取配置对象。在生成配置对象之后,写锁释放,才能正常读取到配置对象。随着云配数据越来越多,生成配置对象所需时长也随之增加,进而导致无法及时为接口提供配置对象,导致接口延时较长,降低接口可用性。
图2是本发明实施例提供的一种整体流程示意图,如图2所示,可以在服务端启动环节预先注册配置对象的定义信息,向指定作用域下发刷新事件通知,以预先在缓存池中加载好配置对象。在需要某个配置对象时,可以基于定义信息从缓存池中获取配置对象。具体的,如果缓存池中存在所需的配置对象,则可以直接返回查找到的配置对象。反之,如果不存在,则可以生成所需的配置对象。进一步地,还可以基于刷新接口对缓存池中的配置对象进行增量刷新或者全量刷新。
本发明实施例中,无需对配置对象做销毁,不存在读写锁的问题,及时对配置对象进行刷新的过程中,由于缓存池中存在原来的配置对象且服务端是向请求方提供缓存池中的配置对象。因此,无需等待可以直接读取缓存池中的配置对象并提供给接口,进而可以降低耗时,使得可以随时刷新云配。
图3为本发明实施例中的一种对象处理装置的结构图,,如图3所示,该装置60可以包括:
获取模块601,用于在接收到刷新请求的情况下,获取待刷新对象的当前配置信息;所述待刷新对象属于缓存池中的配置对象,所述缓存池中的配置对象包括已注入配置信息的类对象,所述服务端用于向请求方提供所述缓存池中的配置对象;
生成模块602,用于根据所述当前配置信息为所述待刷新对象生成刷新后的配置对象,得到已刷新对象;
第一加入模块,用于将所述已刷新对象加入所述缓存池,并清除所述待刷新对象603。
可选地,所述装置60还包括:
查找模块,用于响应于所述请求方发送的对象获取请求,从所述缓存池中查找所述对象获取请求所请求的配置对象,作为目标配置对象;
返回模块,用于在查找到所述目标配置对象的情况下,向所述请求方返回所述目标配置对象,以供所述请求方从所述目标配置对象中获取目标配置值。
可选地,所述装置60还包括:
扫描模块,用于在启动环节,根据预定义路径扫描带有第一指定注解的类对象;
注入模块,用于根据各所述类对象的路径标识以及各配置信息的路径标识,从配置信息提供方中获取各所述类对象对应的配置信息,并为各所述类对象注入获取到的配置信息,得到各所述类对象对应的配置对象;所述类对象的路径标识是基于所述类对象的第二特定注解确定的;
第二加入模块,用于将各所述类对象对应的配置对象均加入所述缓存池。
可选地,所述配置信息提供方提供的环境变量中预先存储有所述配置信息以及所述配置信息的路径标识,所述配置信息与所述配置信息的路径标识对应存储;所述注入模块,具体用于:对于任一所述类对象,从所述环境变量中获取对应的路径标识与所述类对象的路径标识一致的配置信息,得到所述类对象对应的配置信息。
可选地,所述装置60还包括:
拒绝模块,用于在存在未成功加入所述缓存池中的配置对象的情况下,拒绝所述对象获取请求;
所述查找模块,具体用于:
在将各所述类对象对应的配置对象均成功加入所述缓存池后,响应于所述对象获取请求,从所述缓存池中查找所述对象获取请求所请求的配置对象。
可选地,所述装置60还包括:
注册模块,用于预先注册各所述配置对象的定义信息;;
所述查找模块,还具体用于:
将所述缓存池中各所述配置对象的定义信息中的对象标识,与所述对象获取请求携带的对象标识进行匹配;
将对象标识与所述对象获取请求携带的对象标识相匹配的配置对象,确定为所述对象获取请求所请求的配置对象。
可选地,所述缓存池是与指定作用域关联的缓存;所述扫描模块,具体用于:
基于所述指定作用域监听所述启动环节内的刷新事件;;
在监听到所述刷新事件的情况下,根据预定义路径扫描带有第一指定注解的类对象。
可选地,所述获取模块601,具体用于:
将发生变更的配置信息对应的配置对象作为所述待刷新对象,并获取所述发生变更的配置信息的标识;将所述标识指示的配置信息确定为所述待刷新对象的当前配置信息;
或者,将所有的配置对象作为所述待刷新对象,并获取所有当前配置信息,以作为所述待刷新对象的当前配置信息。
综上所述,本发明实施例提供的对象处理装置,在接收到刷新请求的情况下,获取待刷新对象的当前配置信息,根据当前配置信息为待刷新对象生成刷新后的配置对象,得到已刷新对象。接着,将已刷新对象加入缓存池,并清除待刷新对象。其中,待刷新对象属于缓存池中的配置对象,缓存池中的配置对象包括已注入配置信息的类对象,服务端用于向请求方提供缓存池中的配置对象。由于在对缓存池中的配置对象进行刷新时,是在生成了已刷新对象之后,将已刷新对象加入缓存池,才清除缓存池中原来的待刷新对象。这样,在生成已刷新对象的过程中,由于缓存池中存在待刷新对象且服务端是向请求方提供缓存池中的配置对象。因此,在请求方请求待刷新对象时,无需等待可以直接读取缓存池中的该待刷新对象并提供给请求方,进而可以降低向请求方提供配置对象的耗时。
本发明实施例还提供了一种电子设备,如图4所示,包括处理器5001、通信接口5002、存储器5003和通信总线5004,其中,处理器5001,通信接口5002,存储器5003通过通信总线5004完成相互间的通信,
存储器5003,用于存放计算机程序;
处理器5001,用于执行存储器5003上所存放的程序时,实现上述对象处理方法中的步骤中的步骤。
上述终端提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,简称PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,简称EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述终端与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的方法。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
需要说明的是,本申请实施例中获取各种数据相关过程,都是在遵照所在地国家相应的数据保护法规政策的前提下,并获得由相应装置所有者给予授权的情况下进行的。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (12)
1.一种对象处理方法,其特征在于,应用于服务端,所述方法包括:
在接收到刷新请求的情况下,获取待刷新对象的当前配置信息;所述待刷新对象属于缓存池中的配置对象,所述缓存池中的配置对象包括已注入配置信息的类对象,所述服务端用于向请求方提供所述缓存池中的配置对象;
根据所述当前配置信息为所述待刷新对象生成刷新后的配置对象,得到已刷新对象;
将所述已刷新对象加入所述缓存池,并清除所述待刷新对象。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于所述请求方发送的对象获取请求,从所述缓存池中查找所述对象获取请求所请求的配置对象,作为目标配置对象;
在查找到所述目标配置对象的情况下,向所述请求方返回所述目标配置对象,以供所述请求方从所述目标配置对象中获取目标配置值。
3.根据权利要求2所述的方法,其特征在于,所述在接收到刷新请求的情况下,获取待刷新对象的当前配置信息之前,所述方法还包括:
在启动环节,根据预定义路径扫描带有第一指定注解的类对象;
根据各所述类对象的路径标识以及各配置信息的路径标识,从配置信息提供方中获取各所述类对象对应的配置信息,并为各所述类对象注入获取到的配置信息,得到各所述类对象对应的配置对象;所述类对象的路径标识是基于所述类对象的第二特定注解确定的;
将各所述类对象对应的配置对象均加入所述缓存池。
4.根据权利要求3所述的方法,其特征在于,所述配置信息提供方提供的环境变量中预先存储有所述配置信息以及所述配置信息的路径标识,所述配置信息与所述配置信息的路径标识对应存储;
所述根据各所述类对象的路径标识以及各配置信息的路径标识,从配置信息提供方中获取各所述类对象对应的配置信息,包括:
对于任一所述类对象,从所述环境变量中获取对应的路径标识与所述类对象的路径标识一致的配置信息,得到所述类对象对应的配置信息。
5.根据权利要求3或4所述的方法,其特征在于,所述方法还包括:
在存在未成功加入所述缓存池中的配置对象的情况下,,拒绝所述对象获取请求;
所述响应于所述请求方发送的对象获取请求,从所述缓存池中查找所述对象获取请求所请求的配置对象,包括:
在将各所述类对象对应的配置对象均成功加入所述缓存池后,响应于所述对象获取请求,从所述缓存池中查找所述对象获取请求所请求的配置对象。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
预先注册各所述配置对象的定义信息;
所述从所述缓存池中查找所述对象获取请求所请求的配置对象,包括:
将所述缓存池中各所述配置对象的定义信息中的对象标识,与所述对象获取请求携带的对象标识进行匹配;
将对象标识与所述对象获取请求携带的对象标识相匹配的配置对象,确定为所述对象获取请求所请求的配置对象。
7.根据权利要求2所述的方法,其特征在于,所述缓存池是与指定作用域关联的缓存;所述在启动环节,根据预定义路径扫描带有第一指定注解的类对象,包括:
基于所述指定作用域监听所述启动环节内的刷新事件;;
在监听到所述刷新事件的情况下,根据预定义路径扫描带有第一指定注解的类对象。
8.根据权利要求1所述的方法,其特征在于,所述获取待刷新对象的当前配置信息,包括:
将发生变更的配置信息对应的配置对象作为所述待刷新对象,并获取所述发生变更的配置信息的标识;将所述标识指示的配置信息确定为所述待刷新对象的当前配置信息;
或者,将所有的配置对象作为所述待刷新对象,并获取所有当前配置信息,以作为所述待刷新对象的当前配置信息。
9.一种对象处理装置,其特征在于,应用于服务端,所述装置包括:
获取模块,用于在接收到刷新请求的情况下,获取待刷新对象的当前配置信息;所述待刷新对象属于缓存池中的配置对象,所述缓存池中的配置对象包括已注入配置信息的类对象,所述服务端用于向请求方提供所述缓存池中的配置对象;
生成模块,用于根据所述当前配置信息为所述待刷新对象生成刷新后的配置对象,得到已刷新对象;
第一加入模块,用于将所述已刷新对象加入所述缓存池,并清除所述待刷新对象。
10.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1-8任一所述的方法。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-8任一所述的方法。
12.一种包含指令的计算机程序产品,当其在计算机上运行时,使得所述计算机执行权利要求1-8中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211638029.3A CN115878222A (zh) | 2022-12-15 | 2022-12-15 | 对象处理方法、装置、电子设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211638029.3A CN115878222A (zh) | 2022-12-15 | 2022-12-15 | 对象处理方法、装置、电子设备及可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115878222A true CN115878222A (zh) | 2023-03-31 |
Family
ID=85755252
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211638029.3A Pending CN115878222A (zh) | 2022-12-15 | 2022-12-15 | 对象处理方法、装置、电子设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115878222A (zh) |
-
2022
- 2022-12-15 CN CN202211638029.3A patent/CN115878222A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107948135B (zh) | 一种支持多种api协议的数据处理方法及装置 | |
CN111092811B (zh) | 一种请求处理方法、装置及api网关和可读存储介质 | |
CN108897628B (zh) | 一种分布式锁的实现方法、装置及电子设备 | |
CN108512903B (zh) | 一种异常信息处理方法、装置、存储介质及api网关 | |
CN111046310A (zh) | 页面处理方法、装置、服务器及计算机可读存储介质 | |
CN107026879B (zh) | 一种数据缓存方法及后台应用系统 | |
CN111953558A (zh) | 敏感信息的监控方法、装置、电子设备及存储介质 | |
CN110430070B (zh) | 一种服务状态分析方法、装置、服务器、数据分析设备及介质 | |
CN111355765B (zh) | 一种网络请求的处理、发送方法及装置 | |
CN108647102B (zh) | 异构系统的服务请求处理方法、装置和电子设备 | |
CN113064732B (zh) | 一种分布式系统及其管理方法 | |
CN111563215A (zh) | 前端操作权限的控制方法、装置以及相关设备 | |
CN115878222A (zh) | 对象处理方法、装置、电子设备及可读存储介质 | |
CN114090268B (zh) | 容器管理方法及容器管理系统 | |
CN113590180B (zh) | 一种检测策略生成方法及装置 | |
CN112734349A (zh) | 接口生成、数据调用方法、装置和电子设备 | |
CN113596177B (zh) | 智能家居设备的ip地址的解析方法和装置 | |
CN115733666A (zh) | 一种密码管理方法、装置、电子设备及可读存储介质 | |
CN115002194A (zh) | 一种微服务的管理方法及相关装置 | |
CN112579682A (zh) | 数据模型变更的通知方法、装置、电子设备及存储介质 | |
CN111444483A (zh) | 一种鉴权方法、装置及设备 | |
CN110874305A (zh) | 用户操作的记录方法、装置及服务器 | |
CN114374545B (zh) | 防止消息泄露的方法、服务器、装置和电子设备 | |
US11659619B2 (en) | Method and apparatus for performing confirmed-based operation in machine to machine system | |
US11316949B2 (en) | Access management to user related data |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |