本发明涉及数据库技术领域,尤其涉及一种数据库异常捕获处理方法、装置和计算机设备。
背景技术:
在大型的分布式业务系统中,redis节点或客户端在调用接口函数建立与redis数据库的连接时,接口函数不会检查该连接的可用性,即使连接不可用,代码层面也会正常运行。因此,redis客户端如果发生异常,则会导致redis数据库的存储服务不可用,从而堵塞整个系统业务逻辑的运行。目前,在每次调用接口函数时,除了执行业务逻辑本身的代码,还使用try/catch机制来捕获异常。但是,在合作开发的模式下,这样会重复执行部分业务逻辑,导致数据叠加,无法保证数据唯一性和完整性,代码臃肿,逻辑复杂。
技术实现要素:
本发明的目的旨在至少在一定程度上解决上述的技术问题之一。
为此,本发明的第一个目的在于提出一种数据库异常捕获处理方法,能够减少代码冗余量,逻辑清晰,便于代码编写和维护,保证数据唯一性和完整性。
本发明的第二个目的在于提出一种数据库异常捕获处理装置。
本发明的第三个目的在于提出一种计算机设备。
本发明的第四个目的在于提出一种非临时性计算机可读存储介质。
为了实现上述目的,本发明第一方面实施例提出一种数据库异常捕获处理方法,该方法包括:
封装数据库中的操作函数,并生成封装函数;
当所述操作函数调用所述数据库时,利用所述封装函数判断是否发生异常;
如果发生异常,则对所述操作函数进行相应的异常处理。
可选的,封装数据库中的操作函数,并生成封装函数,包括:
定义装饰器函数;
利用所述装饰器函数的函数名装饰所述操作函数。
可选的,定义所述装饰器函数,包括:
初始化所述装饰器函数;
将所述操作函数的函数名及其对应的参数导入所述装饰器函数;
定义所述装饰器函数的异常捕获操作。
可选的,对所述操作函数进行相应的异常处理,包括:
确定异常类型,并根据所述异常类型对所述操作函数进行相应的异常处理。
可选的,所述异常类型包括数据库连接异常、数据格式错误、函数执行错误以及数据库写入错误中的至少一种。
可选的,根据所述异常类型对所述操作函数进行相应的异常处理,包括:
当所述异常类型为数据库连接异常时,重新建立与所述数据库的连接;或者
当所述异常类型为数据格式错误时,输出错误日志;或者
当所述异常类型为函数执行错误时,重新执行所述操作函数;或者
当所述异常类型为数据库写入错误时,重新向所述数据库执行数据写入操作。
可选的,在重新建立与所述数据库的连接之后,还包括:
检测所述连接的可用性。
本发明实施例的数据库异常捕获处理方法,通过封装数据库中的操作函数,并生成封装函数,以及当操作函数调用数据库时,利用封装函数判断是否发生异常,如果发生异常,则对操作函数进行相应的异常处理,减少代码冗余量,逻辑清晰,便于代码编写和维护,保证数据唯一性和完整性。
为了实现上述目的,本发明第二方面实施例提出了一种数据库异常捕获处理装置,包括:
封装模块,用于封装数据库中的操作函数,并生成封装函数;
判断模块,用于当所述操作函数调用所述数据库时,利用所述封装函数判断是否发生异常;
异常处理模块,用于如果发生异常,则对所述操作函数进行相应的异常处理。
可选的,所述封装模块,用于:
定义装饰器函数;
利用所述装饰器函数的函数名装饰所述操作函数。
可选的,所述封装模块,具体用于:
初始化所述装饰器函数;
将所述操作函数的函数名及其对应的参数导入所述装饰器函数;
定义所述装饰器函数的异常捕获操作。
可选的,所述异常处理模块,用于:
确定异常类型,并根据所述异常类型对所述操作函数进行相应的异常处理。
可选的,所述异常类型包括数据库连接异常、数据格式错误、函数执行错误以及数据库写入错误中的至少一种。
可选的,所述异常处理模块,具体用于:
当所述异常类型为数据库连接异常时,重新建立与所述数据库的连接;或者
当所述异常类型为数据格式错误时,输出错误日志;或者
当所述异常类型为函数执行错误时,重新执行所述操作函数;或者
当所述异常类型为数据库写入错误时,重新向所述数据库执行数据写入操作。
可选的,所述异常处理模块,还用于:
检测所述连接的可用性。
本发明实施例的数据库异常捕获处理装置,通过封装数据库中的操作函数,并生成封装函数,以及当操作函数调用数据库时,利用封装函数判断是否发生异常,如果发生异常,则对操作函数进行相应的异常处理,减少代码冗余量,逻辑清晰,便于代码编写和维护,保证数据唯一性和完整性。
为了实现上述目的,本发明第三方面实施例提出了一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如第一方面实施例所述的数据库异常捕获处理方法。
为了实现上述目的,本发明第四方面实施例还提出了一种非临时性计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如第一方面实施例所述的数据库异常捕获处理方法。
本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
构成本发明的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是本发明一个实施例的数据库异常捕获处理方法的流程图;
图2是本发明一个实施例的定义装饰器函数的流程图;
图3是本发明一个实施例的数据库异常捕获处理装置的结构示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
以下结合具体实施例对本发明作进一步详细描述,这些实施例不能理解为限制本发明所要求保护的范围。
下面参考附图描述本发明实施例的数据库异常捕获处理方法、装置和计算机设备。
图1是本发明一实施例的数据库异常捕获处理方法的流程图,如图1所示,该方法包括以下步骤:
s1,封装数据库中的操作函数,并生成封装函数。
首先,可先定义一个装饰器函数,然后利用该装饰器函数的函数名装饰操作函数,从而生成一个封装函数。
具体地,如图2所示,定义装饰器函数可进一步包括以下步骤:
s11,初始化装饰器函数。
其中,初始化装饰函数可包括初始化服务器地址变量。
s12,将操作函数的函数名及其对应的参数导入装饰器函数。
s13,定义装饰器函数的异常捕获操作。
举例来说,首先可先定义一个类classredisclient(),初始化装饰器函数。然后,定义装饰器函数,defauto_catch(传入操作函数名func),defwrapper()(传入操作函数参数)。之后,可定义装饰器函数的异常捕获操作。
定义装饰器函数的异常捕获操作,具体包括以下步骤:
利用try循环执行操作函数直至执行成功,无异常;利用catch捕获连接异常,重新建立与数据库的连接,再利用ping()检测连接可用性;利用catch捕获其他异常,执行相应处理。
s2,当操作函数调用数据库时,利用封装函数判断是否发生异常。
利用封装函数判断是否发生异常,即调用生成的封装函数,执行装饰器函数中定义的异常捕获操作。
s3,如果发生异常,则对操作函数进行相应的异常处理。
具体地,可先确定异常类型,再根据异常类型对操作函数进行相应的异常处理。其中,异常类型包括数据库连接异常、数据格式错误、函数执行错误以及数据库写入错误中的至少一种。
本实施例中,列举了几种常见的异常类型的处理方式:
第一种:当异常类型为数据库连接异常时,重新建立与数据库的连接。在重新建立与数据库的连接之后,可通过ping来检测连接的可用性。不可用时,一定间隔后再重新连接。
第二种:当异常类型为数据格式错误时,输出错误日志。
第三种:当异常类型为函数执行错误时,重新执行操作函数。
第四种:当异常类型为数据库写入错误时,重新向数据库执行数据写入操作。
下面以redis数据库为例,进行详细说明:
redis是一个key-value内存数据库,与其他非关系型数据库主要不同在于:redis中值的类型不仅限于字符串,还支持如下抽象数据类型:1.字符串列表;2.无序不重复的字符串集合;3.有序不重复的字符串集合;4.键、值都为字符串的哈希表。redis支持不同无序、有序的列表,无序、有序的集合间的交集、并集等高级服务器端原子操作。大型业务系统中大量调用redis接口进行操作,在调用接口的业务代码外,每次都会使用try/catch捕获异常,导致代码臃肿,逻辑复杂。
针对上述情况,本发明使用装饰器技术,封装redis每一个操作函数,对其进行监控。实现每次数据操作时,自动进行异常捕获,并做相应处理,不影响数据操作环节之外的任何业务逻辑,保证其余数据相关的业务代码不因异常而重复执行,保证数据不丢失、不增加。且有助于使代码简短,省去大量重复代码,凸显主要的业务逻辑代码,架构更清晰,让协作研发人员专心进行业务开发。
具体代码如下:
执行需要异常捕获的redis原生函数1(参数)
##类的使用
#导入模块
importredisclient
#新建类实例
redisdb=redisclient()
#调用自动异常捕获的封装函数1
redisdb.封装函数1(参数)
通过上述方式,在建立redis连接时,可以及时发现连接的不可用,并重新建立连接。在redis数据库中的每个操作函数内,实现自动异常捕获,并进行相应处理,使主体业务逻辑清晰有条理,减少了代码冗余,同时避免重复执行其他业务代码,保证业务系统的正常运行和数据的唯一性、完整性。
本发明实施例的数据库异常捕获处理方法,通过封装数据库中的操作函数,并生成封装函数,以及当操作函数调用数据库时,利用封装函数判断是否发生异常,如果发生异常,则对操作函数进行相应的异常处理,减少代码冗余量,逻辑清晰,便于代码编写和维护,保证数据唯一性和完整性。
为了实现上述实施例,本发明还提出了一种数据库异常捕获处理装置。
图3是本发明一实施例的数据库异常捕获处理装置的结构示意图。
如图3所示,该装置包括封装模块31、判断模块32以及异常处理模块33。
封装模块31,用于封装数据库中的操作函数,并生成封装函数。
判断模块32,用于当操作函数调用数据库时,利用封装函数判断是否发生异常。
异常处理模块33,用于如果发生异常,则对操作函数进行相应的异常处理。
应当理解的是,本实施例的数据库异常捕获处理装置与第一方面实施例的数据库异常捕获处理方法的描述一致,此处不再赘述。
本发明实施例的数据库异常捕获处理装置,通过封装数据库中的操作函数,并生成封装函数,以及当操作函数调用数据库时,利用封装函数判断是否发生异常,如果发生异常,则对操作函数进行相应的异常处理,减少代码冗余量,逻辑清晰,便于代码编写和维护,保证数据唯一性和完整性。
为了实现上述实施例,本发明还提出了一种计算机设备。
该计算机设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时,实现如第一方面实施例的数据库异常捕获处理方法。
为了实现上述实施例,本发明还提出了一种非临时性计算机可读存储介质。
该非临时性计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现如第一方面实施例的数据库异常捕获处理方法。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(ram),只读存储器(rom),可擦除可编辑只读存储器(eprom或闪速存储器),光纤装置,以及便携式光盘只读存储器(cdrom)。另外,计算机可读介质甚至可以是可在其上打印程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(pga),现场可编程门阵列(fpga)等。
需要说明的是,在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
1.一种数据库异常捕获处理方法,其特征在于,包括:
封装数据库中的操作函数,并生成封装函数;
当所述操作函数调用所述数据库时,利用所述封装函数判断是否发生异常;
如果发生异常,则对所述操作函数进行相应的异常处理。
2.如权利要求1所述的方法,其特征在于,封装数据库中的操作函数,并生成封装函数,包括:
定义装饰器函数;
利用所述装饰器函数的函数名装饰所述操作函数。
3.如权利要求2所述的方法,其特征在于,定义所述装饰器函数,包括:
初始化所述装饰器函数;
将所述操作函数的函数名及其对应的参数导入所述装饰器函数;
定义所述装饰器函数的异常捕获操作。
4.如权利要求1所述的方法,其特征在于,对所述操作函数进行相应的异常处理,包括:
确定异常类型,并根据所述异常类型对所述操作函数进行相应的异常处理。
5.如权利要求4所述的方法,其特征在于,所述异常类型包括数据库连接异常、数据格式错误、函数执行错误以及数据库写入错误中的至少一种。
6.如权利要求5所述的方法,其特征在于,根据所述异常类型对所述操作函数进行相应的异常处理,包括:
当所述异常类型为数据库连接异常时,重新建立与所述数据库的连接;或者
当所述异常类型为数据格式错误时,输出错误日志;或者
当所述异常类型为函数执行错误时,重新执行所述操作函数;或者
当所述异常类型为数据库写入错误时,重新向所述数据库执行数据写入操作。
7.如权利要求6所述的方法,其特征在于,在重新建立与所述数据库的连接之后,还包括:
检测所述连接的可用性。
8.一种数据库异常捕获处理装置,其特征在于,包括:
封装模块,用于封装数据库中的操作函数,并生成封装函数;
判断模块,用于当所述操作函数调用所述数据库时,利用所述封装函数判断是否发生异常;
异常处理模块,用于如果发生异常,则对所述操作函数进行相应的异常处理。
9.如权利要求8所述的装置,其特征在于,所述封装模块,用于:
定义装饰器函数;
利用所述装饰器函数的函数名装饰所述操作函数。
10.如权利要求9所述的装置,其特征在于,所述封装模块,具体用于:
初始化所述装饰器函数;
将所述操作函数的函数名及其对应的参数导入所述装饰器函数;
定义所述装饰器函数的异常捕获操作。
11.如权利要求8所述的装置,其特征在于,所述异常处理模块,用于:
确定异常类型,并根据所述异常类型对所述操作函数进行相应的异常处理。
12.如权利要求11所述的装置,其特征在于,所述异常类型包括数据库连接异常、数据格式错误、函数执行错误以及数据库写入错误中的至少一种。
13.如权利要求12所述的装置,其特征在于,所述异常处理模块,具体用于:
当所述异常类型为数据库连接异常时,重新建立与所述数据库的连接;或者
当所述异常类型为数据格式错误时,输出错误日志;或者
当所述异常类型为函数执行错误时,重新执行所述操作函数;或者
当所述异常类型为数据库写入错误时,重新向所述数据库执行数据写入操作。
14.如权利要求13所述的装置,其特征在于,所述异常处理模块,还用于:
检测所述连接的可用性。
15.一种计算机设备,其特征在于,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如权利要求1-7任一所述的数据库异常捕获处理方法。
16.一种非临时性计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-7任一所述的数据库异常捕获处理方法。
技术总结