一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种数据库升级方法、装置及设备与流程

2022-11-16 08:53:38 来源:中国专利 TAG:
1.本发明涉及数据库信息处理
技术领域
:,特别是指一种数据库升级方法、装置及设备。
背景技术
::2.随着微服务的发展,应用发布的频率越来越高,而应用的升级,需要保留已有数据,基于老版本的数据库表结构和数据进行升级。3.生产环境的应用程序升级,需要升级对应的数据库结构和数据,确保升级前的数据库表结构和数据,在执行升级脚本后要兼容升级后的应用程序。现有技术中至少存在如下问题:4.人工比较新旧两个版本的数据库并手工编写升级脚本,耗时耗力,效率低下。技术实现要素:5.本发明要解决的技术问题是如何提供一种数据库升级方法、装置及设备。实现高效快速地数据库升级。6.为解决上述技术问题,本发明的技术方案如下:7.一种数据库升级方法,所述方法包括:8.获得生产环境的第一版本数据库的脚本以及预生产环境的第二版本数据库的脚本;9.根据所述第一版本数据库的脚本和第二版本数据库的脚本,生成数据库升级脚本;10.在所述生产环境发布第二版本的微服务程序,再执行所述数据库升级脚本。11.可选的,获得生产环境的第一版本数据库的脚本,包括:12.获得所述生产环境的第一版本微服务程序的第一数据库全量脚本;13.获得所述第一版本微服务程序对应的第一版本数据库的第二数据库全量脚本;14.获得所述生产环境中定义为枚举值的属性的枚举值或者打上枚举标签的属性的枚举值;15.在所述第一数据库全量脚本、第二数据库全量脚本中的枚举值以及所述属性的枚举值一致的情况下,获得第一版本的脚本。16.可选的,获得所述生产环境的第一版本微服务程序的第一数据库全量脚本,包括:17.通过所述生产环境的第一版本微服务程序,导出第一关系型数据库全量表脚本;18.通过所述第一版本微服务程序,导出第一非关系型数据库全量表脚本;19.扫描所述第一版本微服务程序,获取使用文档的第一预设对象的列表;20.获取所述第一预设对象的所有属性的名称、类型和值,生成并导出第一数据库全量脚本。21.可选的,通过生产环境的第一版本微服务程序,导出第一关系型数据库全量表脚本,包括:22.扫描所述第一版本微服务程序,获取使用表格的第二预设对象的列表,根据所述第二预设对象,形成第一数据库表;23.扫描所述第一版本微服务程序的微服务资源文件包,获取所有的目标文件,根据所述目标文件,形成第二数据库表;24.将所述第一数据库表和所述第二数据库表的并集确定为所述第一关系型数据库全量表脚本。25.可选的,通过所述第一版本微服务程序,导出第一非关系型数据库全量表脚本,包括:26.通过操作数据的框架springdata-jpa与数据库mongodb的结合,遍历文档对象以及文档对象里的枚举值和嵌套对象,生成并导出第一非关系型数据库全量表脚本。27.可选的,获得所述第一版本微服务程序对应的第一版本数据库的第二数据库全量脚本,包括:28.当数据库为关系型数据库时,通过关系型数据库提供的导出命令导出所述第一版本微服务程序对应的第一版本数据库的第二数据库全量脚本;或者29.当数据库为非关系型数据库时,导出所述非关系型数据库的数据,遍历所述数据解析出所述第一版本微服务程序对应的第一版本数据库的第二数据库全量脚本。30.可选的,数据库升级方法,还包括:31.在所述第一数据库全量脚本、第二数据库全量脚本中的枚举值以及所述属性的枚举值不一致的情况下,如果所述第一数据库全量脚本的枚举值有误,则纠正所述第一版本微服务程序;如果所述第二数据库全量脚本中的枚举值有误,则纠正所述第一版本微服务程序对应的第一版本数据库。32.可选的,获得预生产环境的第二版本数据库的脚本,包括:33.获得所述预生产环境的第二版本微服务程序的第三数据库全量脚本;34.获得所述第二版本微服务程序对应的第二版本数据库的第四数据库全量脚本;35.获得所述预生产环境中定义为枚举值的属性的枚举值或者打上枚举标签的属性的枚举值;36.在所述第三数据库全量脚本、第四数据库全量脚本中的枚举值以及所述属性的枚举值一致的情况下,获得第二版本的脚本。37.可选的,获得所述预生产环境的第二版本微服务程序的第三数据库全量脚本,包括:38.通过所述预生产环境的第二版本微服务程序,导出第二关系型数据库全量表脚本;39.通过所述第二版本微服务程序,导出第二非关系型数据库全量表脚本;40.扫描所述第二版本微服务程序,获取使用文档的第二预设对象的列表;41.获取所述第二预设对象的所有属性的名称、类型和值,生成并导出第一数据库全量脚本。42.可选的,通过所述预生产环境的第二版本微服务程序,导出第二关系型数据库全量表脚本,包括:43.扫描所述第二版本微服务程序,获取使用表格的第三预设对象的列表,根据所述第三预设对象,形成第三数据库表;44.扫描所述第二版本微服务程序的微服务资源文件包,获取所有的目标文件,根据所述目标文件,形成第四数据库表;45.将所述第三数据库表和所述第四数据库表的并集确定为所述第二关系型数据库全量表脚本。46.可选的,通过所述第二版本微服务程序,导出第二非关系型数据库全量表脚本,包括:47.通过操作数据的框架springdata-jpa与数据库mongodb的结合,遍历文档对象以及文档对象里的枚举值和嵌套对象,生成并导出第二非关系型数据库全量表脚本。48.可选的,获得所述第二版本微服务程序对应的第二版本数据库的第四数据库全量脚本,包括:49.在数据库为关系型数据库时,通过关系型数据库提供的导出命令导出所述第二版本微服务程序对应的第二版本数据库的第四数据库全量脚本;或者50.在数据库为非关系型数据库时,导出所述非关系型数据库的数据,遍历所述数据解析出所述第二版本微服务程序对应的第二版本数据库的第四数据库全量脚本。51.可选的,数据库升级方法还包括:52.在所述第三数据库全量脚本、第四数据库全量脚本中的枚举值以及所述属性的枚举值不一致的情况下,如果所述第三数据库全量脚本的枚举值有误,则纠正所述第二版本微服务程序;如果所述第四数据库全量脚本中的枚举值有误,则纠正所述第二版本微服务程序对应的第二版本数据库。53.可选的,根据所述第一版本数据库的脚本和第二版本数据库的脚本,生成数据库升级脚本,包括:54.获得所述第一版本数据库的脚本和第二版本数据库的脚本的差异;55.根据所述差异生成数据库升级脚本。56.本发明的实施例还提供一种数据库升级装置,所述装置包括:57.获得模块,用于获得生产环境的第一版本数据库的脚本以及预生产环境的第二版本数据库的脚本;58.处理模块,用于根据所述第一版本数据库的脚本和第二版本数据库的脚本,生成数据库升级脚本;59.执行模块,用于在所述生产环境发布第二版本的微服务程序,再执行所述数据库升级脚本。60.本发明的实施例还提供一种数据库升级设备,包括:处理器、存储有计算机程序的存储器,所述计算机程序被处理器运行时,执行如上所述的方法。61.本发明的实施例还提供一种计算机可读存储介质,存储指令,当所述指令在计算机上运行时,使得计算机执行如上所述的方法。62.本发明的上述方案至少包括以下有益效果:63.通过获得生产环境的第一版本数据库的脚本以及预生产环境的第二版本数据库的脚本;根据所述第一版本数据库的脚本和第二版本数据库的脚本,生成数据库升级脚本;在所述生产环境发布第二版本的微服务程序,再执行所述数据库升级脚本。本发明的方案能够基于微服务程序导出相应的脚本,并自动生成升级数据库,从而可以快速高效实现数据库升级。附图说明64.图1是本发明实施例的数据库升级方法的流程示意图;65.图2是本发明实施例的生成数据库升级脚本的流程示意图;66.图3是本发明实施例的执行数据库升级脚本的流程示意图;67.图4是本发明实施例的生成部署环境的脚本的流程示意图;68.图5是本发明实施例的数据库升级装置的模块框示意图。具体实施方式69.下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。70.如图1所示,本发明的实施例提供一种数据库升级方法,所述方法包括:71.步骤11,获得生产环境的第一版本数据库的脚本以及预生产环境的第二版本数据库的脚本;72.步骤12,根据所述第一版本数据库的脚本和第二版本数据库的脚本,生成数据库升级脚本;73.步骤13,在所述生产环境发布第二版本的微服务程序,再执行所述数据库升级脚本。74.如图2和图3所示,该实施例基于生产环境的第一版本数据库的脚本和预生产环境的第二版本数据库的脚本通过全量脚本比对器生成数据库升级脚本,然后在生产环境发布第二版本的微服务程序并执行数据库升级脚本,最终完成数据库升级。解决了现有技术中应用程序和数据库不兼容或脏表、脏数据的问题,提供了有效的检测机制,保证了数据库和程序的清洁,节约了大量的人力物力,减少了出错的可能性。75.本发明一可选的实施例中,步骤11中获得生产环境的第一版本数据库的脚本,包括:76.步骤111,获得所述生产环境的第一版本微服务程序的第一数据库全量脚本;77.步骤112,获得所述第一版本微服务程序对应的第一版本数据库的第二数据库全量脚本;78.步骤113,获得所述生产环境中定义为枚举值的属性的枚举值或者打上枚举标签的属性的枚举值;79.步骤114,在所述第一数据库全量脚本、第二数据库全量脚本中的枚举值以及所述属性的枚举值一致的情况下,获得第一版本的脚本。80.如图4所示,图4中的部署环境可以是生产环境,也可以是预生产环境,本实施例中,部署环境作为生产环境,微服务v1作为生产环境第一版本微服务程序,数据库v1作为第一版本微服务程序对应的第一版本数据库,导出生产环境的第一版本微服务程序的第一数据库全量脚本、导出第一版本数据库的第二数据库全量脚本以及生产环境中定义为枚举值的属性的枚举值或者打上枚举标签的属性的枚举值,进行一致性检测,若检测通过,即一致的情况下,则生成第一版本的脚本。81.本发明一可选的实施例中,步骤111可以包括:82.步骤1111,通过所述生产环境的第一版本微服务程序,导出第一关系型数据库全量表脚本;83.步骤1112,通过所述第一版本微服务程序,导出第一非关系型数据库全量表脚本;84.步骤1113,扫描所述第一版本微服务程序,获取使用文档的第一预设对象的列表;85.步骤1114,获取所述第一预设对象的所有属性的名称、类型和值,生成并导出第一数据库全量脚本。86.本实施例中,关系型数据库是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据;非关系型数据库(nosql数据库)可以包括数据库mongodb。87.进一步的,步骤1111具体包括:88.步骤1111a,扫描所述第一版本微服务程序,获取使用表格的第二预设对象的列表,根据所述第二预设对象,形成第一数据库表;89.步骤1111b,扫描所述第一版本微服务程序的微服务资源文件包,获取所有的目标文件,根据所述目标文件,形成第二数据库表;90.步骤1111c,将所述第一数据库表和所述第二数据库表的并集确定为所述第一关系型数据库全量表脚本。91.本实施例通过扫描整个第一版本微服务程序,查找并获取使用表格的第二预设对象的列表,解析第二预设对象,获取该对象的所有属性名、类型和值,形成第一数据库表;再扫描整个第一版本微服务程序的微服务资源文件包,查找并获取所有的目标文件,形成第二数据库表;根据不同的数据库类型,结合第一数据库表和第二数据库表,形成第一数据库表和第二数据库表的并集,在第一版本微服务程序中生成第一关系型数据库全量表脚本,实现了利用微服务程序导出第一关系型数据库全量表脚本。92.一个具体的实施例1中,通过微服务程序导出关系型数据库全量表脚本,微服务程序中表格的部分程序代码如下所示:93.import…94.@table(name="tbl_account_enterprise_rel")95.@builder96.@allargsconstructor97.@noargsconstructor98.@data99.publicclasstblaccountenterpriserel{100.@id101.privateintegerid;102.@column(name="user_id")103.privatestringuserid;104.@column(name="eid")105.privatestringeid;106.@column(name="status")107.privateestatusstatus;108.}109.根据上述的微服务程序的部分程序代码,查找使用@table的实体结构bean对象,获取所有bean对象列表,并解析bean对象,获取该对象的所有属性名、类型和枚举值中的枚举类型,形成第一数据库表;其中,上述代码中,“userid”是属性名,“string”是属性的类型,“estatus”是枚举值,进一步的,枚举值对应的部分程序代码如下所示:110.packagenet.virtue.oscar.core.mds.mapper.bo;111.publicenumestatus{112.enabled,disabled113.}114.在微服务程序中获取被定义为枚举值的属性或被打上枚举标签的属性,然后根据上述枚举值对应的部分程序代码,查找并获取数据库中的真实枚举值,得到枚举值中的枚举类型是“enabled,disabled”,通过属性名“userid”、属性的类型“string”以及枚举值“estatus”的枚举类型“enabled,disabled”,形成第一数据库表;115.再扫描整个微服务服务资源文件包,查找所有的mybatisxmlmapper文件,获取所有的resultmap的表名type值,然后查找下面的子元素,获取字段名和字段类型,形成第二数据库表,其中,mybatisxmlmapper文件的部分程序代码如下所示:[0116][0117]其中,resultmap的表名type值为“tblaccountenterpriserel”,子元素中的字段名为“user_id”,字段类型为“varchar”,根据表名type值“tblaccountenterpriserel”、字段名“user_id”以及字段类型“varchar”,形成第二数据库表;根据不同的数据库类型,结合第一数据库表和第二数据库表形成并集,在微服务程序中生成关系型数据库全量表脚本。[0118]本发明一可选的实施例中,步骤1112包括:[0119]通过操作数据的框架springdata-jpa与数据库mongodb的结合,遍历文档对象以及文档对象里的枚举值和嵌套对象,生成并导出第一非关系型数据库全量表脚本。[0120]本实施例中,springdata-jpa是springdata框架项目下的一个模块,提供了一套基于jpa(javapersistenceapi,java持久化应用程序编程接口)标准操作数据库的简化方案;实施例中通过springdata-jpa与数据库mongodb的结合,遍历文档对象,以及文档对象中的枚举值和嵌套对象,生成第一非关系型数据库全量表脚本,其中第一非关系型数据库全量表脚本可以包括json(javascriptobjectnotation,js对象简谱)的数据库表。[0121]需要说明的是,对于非基础类型的属性,如list、set、自定义实体结构bean,需要继续遍历其子对象,形成嵌套格式的数据库表结构,格式如下所示:[0122]{[0123]"id":"string",[0124]"name":"string",[0125]"age":"int",[0126]"email":"string",[0127]"password":"string",[0128]"subjectlist":[{[0129]"id":"long",[0130]"subname":"string",[0131]....[0132]}],[0133]....[0134]一个具体的实施例2中,通过微服务程序导出非关系型nosql数据库全量表脚本,nosql是非关系型数据库,包括mongodb,微服务程序中文档的父节点部分程序代码如下所示:[0135]@document(collection="c_student")[0136]publicclassstudent{[0137]@id()[0138]privatestringid;[0139]@field("name")[0140]privatestringstudentname;[0141]privateintage;[0142]privatestringemail;[0143]privatestringpassword;[0144]privatelist《subject》subjectlist=newarraylist《》[0145]publicstringgetid(){[0146]returnstudentname;[0147]}[0148]publicstringgetid(){[0149]returnid;[0150]}[0151]publicvoidsetid(stringid){[0152]this.id=id;[0153]}[0154]publicvoidsetstudentname(stringstudentname){[0155]this.studentname=studentname;[0156]}[0157]publicintgetage(){[0158]returnage;[0159]}[0160]扫描整个微服务程序,查找使用@document的实体结构bean对象,获取所有bean对象的列表,解析bean对象,获取该对象的所有属性名、类型和值,形成非关系型数据库全量表脚本,其中,上述代码中“collection="c_student"”是表名,“studentname”是属性名,“string”是属性类型,“list《subject》”是嵌套类型,进一步的,表名“collection="c_student"”对应的部分程序代码如下:[0161][0162]嵌套类型对应的子节点部分程序代码如下所示:[0163]publicclasssubject{[0164]privatelongid;[0165]privatestringsubname;[0166]publiclonggetid(){[0167]returnid;[0168]}[0169]publicvoidsetid(longid){[0170]this.id=id;[0171]}[0172]publicstringgetsubname(){[0173]returnsubname;[0174]}[0175]本发明一可选的实施例中,步骤112包括:[0176]当数据库为关系型数据库时,通过关系型数据库提供的导出命令导出所述第一版本微服务程序对应的第一版本数据库的第二数据库全量脚本;或者[0177]当数据库为非关系型数据库时,导出所述非关系型数据库的数据,遍历所述数据解析出所述第一版本微服务程序对应的第一版本数据库的第二数据库全量脚本。[0178]本实施例中,导出数据库的第二数据库全量脚本需要根据数据库的类型进行处理,对于关系型数据库可以通过关系型数据库提供命令导出,其中命令优选的是export命令;对于非关系型数据库,可以先导出数据,然后通过遍历数据解析出,其中非关系型数据库包括数据库mongodb。[0179]本发明一可选的实施例中,数据库升级方法还可以包括:[0180]步骤115,在所述第一数据库全量脚本、第二数据库全量脚本中的枚举值以及所述属性的枚举值不一致的情况下,如果所述第一数据库全量脚本的枚举值有误,则纠正所述第一版本微服务程序;如果所述第二数据库全量脚本中的枚举值有误,则纠正所述第一版本微服务程序对应的第一版本数据库。[0181]如图4所示,若一致性测试未通过,若第一版本微服务程序中的实体类表结构和/或第一数据库全量脚本的枚举值有误,纠正第一版本微服务程序,重新比较;若第二数据库全量脚本和/或第二数据库全量脚本中的枚举值有误,纠正第一版本微服务程序对应的第一版本数据库,并重新比较;另外,需要说明的是,对于一些可以忽略的错误、多余但暂时可以保留的表结构和/或属性,可以打上忽略标签。[0182]本发明一可选的实施例中,步骤11中,获得预生产环境的第二版本数据库的脚本,包括:[0183]步骤116,获得所述预生产环境的第二版本微服务程序的第三数据库全量脚本;[0184]步骤117,获得所述第二版本微服务程序对应的第二版本数据库的第四数据库全量脚本;[0185]步骤118,获得所述预生产环境中定义为枚举值的属性的枚举值或者打上枚举标签的属性的枚举值;[0186]步骤119,在所述第三数据库全量脚本、第四数据库全量脚本中的枚举值以及所述属性的枚举值一致的情况下,获得第二版本的脚本。[0187]如图4所示,这里,微服务v1作为预生产环境第二版本微服务程序,数据库v1作为第二版本微服务程序对应的第二版本数据库,导出预生产环境的第二版本微服务程序的第二数据库全量脚本、导出第二版本数据库的第三数据库全量脚本以及预生产环境中定义为枚举值的属性的枚举值或者打上枚举标签的属性的枚举值,进行一致性检测,若检测通过,即一致的情况下,则生成第二版本的脚本。[0188]本发明一可选的实施例中,步骤115包括:[0189]步骤1161,通过所述预生产环境的第二版本微服务程序,导出第二关系型数据库全量表脚本;[0190]步骤1162,通过所述第二版本微服务程序,导出第二非关系型数据库全量表脚本;[0191]步骤1163,扫描所述第二版本微服务程序,获取使用文档的第二预设对象的列表;[0192]步骤1164,获取所述第二预设对象的所有属性的名称、类型和值,生成并导出第一数据库全量脚本。[0193]进一步的,步骤1161具体包括:[0194]步骤1161a,扫描所述第二版本微服务程序,获取使用表格的第三预设对象的列表,根据所述第三预设对象,形成第三数据库表;[0195]步骤1161b,扫描所述第二版本微服务程序的微服务资源文件包,获取所有的目标文件,根据所述目标文件,形成第四数据库表;[0196]步骤1161c,将所述第三数据库表和所述第四数据库表的并集确定为所述第二关系型数据库全量表脚本。[0197]本实施例通过扫描第二版本微服务程序,查找并获取使用表格的第三预设对象的列表,解析第三预设对象,获取该对象的所有属性名、类型和值,形成第三数据库表;再扫描整个第二版本微服务程序的微服务资源文件包,查找并获取所有的目标文件,形成第四数据库表;最终根据不同的数据类型,结合第三数据库表和第四数据库表,形成第三数据库表和第四数据库表的并集,在第二版本微服务程序中生成第二关系型数据库全量表脚本,实现了利用预生产环境的第二版本微服务程序导出第二关系型数据库全量表脚本。[0198]本发明一可选的实施例中,步骤1162具体包括:[0199]通过操作数据的框架springdata-jpa与数据库mongodb的结合,遍历文档对象以及文档对象里的枚举值和嵌套对象,生成并导出第二非关系型数据库全量表脚本。[0200]本实施例中,通过框架springdata-jpa与数据库mongodb的结合,遍历文档对象以及文档对象中的枚举值和嵌套对象,生成第二非关系型数据库全量表脚本,这里的第二非关系型数据库全量表脚本可以是轻量级数据交换格式。[0201]本发明一可选的实施例中,步骤117可以包括:[0202]在数据库为关系型数据库时,通过关系型数据库提供的导出命令导出所述第二版本微服务程序对应的第二版本数据库的第四数据库全量脚本;或者[0203]在数据库为非关系型数据库时,导出所述非关系型数据库的数据,遍历所述数据解析出所述第二版本微服务程序对应的第二版本数据库的第四数据库全量脚本。[0204]本实施例中,导出数据库的第二数据库全量脚本需要先判断数据库的类型是关系型数据库还是非关系型数据库,对于关系型数据库可以通过提供的导出命令进行导出,其中该命令优选的是export命令;对于非关系型数据库可以通过先导出数据,然后通过遍历数据解析出。[0205]本发明一可选的实施例中,数据库升级方法还可以包括:[0206]步骤1110,在所述第三数据库全量脚本、第四数据库全量脚本中的枚举值以及所述属性的枚举值不一致的情况下,如果所述第三数据库全量脚本的枚举值有误,则纠正所述第二版本微服务程序;如果所述第四数据库全量脚本中的枚举值有误,则纠正所述第二版本微服务程序对应的第二版本数据库。[0207]如图4所示,本实施例在一致性测试未通过时,若第二版本微服务程序中的实体类表结构和/或第三数据库全量脚本的枚举值有误时,纠正第二版本微服务程序,并进行重新比较;若第四数据库全量脚本和/或第四数据库全量脚本的枚举值有误,纠正第二版本微服务程序对应的第三版本数据库,并重新比较;此外,对于一些可忽略的错误、多余但暂时可保留的表结构和/或属性,可打上忽略标签。[0208]本发明一可选的实施例中,步骤12包括:[0209]步骤121,获得所述第一版本数据库的脚本和第二版本数据库的脚本的差异;[0210]步骤122,根据所述差异生成数据库升级脚本。[0211]如图2所示,本实施例将生成环境的第一版本数据库的脚本和预生产环境的第二版本数据库的脚本通过全量脚本比对器,得到差异,再根据差异生成数据库升级脚本。[0212]本发明的实施例通过获得生产环境的第一版本数据库的脚本以及预生产环境的第二版本数据库的脚本;根据所述第一版本数据库的脚本和第二版本数据库的脚本,生成数据库升级脚本;在所述生产环境发布第二版本的微服务程序,并执行所述数据库升级脚本。实现了基于微服务程序的数据库表(脚本)的导出,并进一步自动生成数据库升级脚本,从而实现了数据库的快速升级;另外,生产环境下的数据库针对不同的数据库类型,无需人工编写,可以高效快速导出应用的数据库表结构,实现数据库的升级。[0213]如图5所示,本发明的实施例还提供一种数据库升级装置50,所述装置包括:[0214]获得模块51,用于获得生产环境的第一版本数据库的脚本以及预生产环境的第二版本数据库的脚本;[0215]处理模块52,用于根据所述第一版本数据库的脚本和第二版本数据库的脚本,生成数据库升级脚本;[0216]执行模块53,用于在所述生产环境发布第二版本的微服务程序,再执行所述数据库升级脚本。[0217]可选的,获得生产环境的第一版本数据库的脚本,包括:[0218]获得所述生产环境的第一版本微服务程序的第一数据库全量脚本;[0219]获得所述第一版本微服务程序对应的第一版本数据库的第二数据库全量脚本;[0220]获得所述生产环境中定义为枚举值的属性的枚举值或者打上枚举标签的属性的枚举值;[0221]在所述第一数据库全量脚本、第二数据库全量脚本中的枚举值以及所述属性的枚举值一致的情况下,获得第一版本的脚本。[0222]可选的,获得所述生产环境的第一版本微服务程序的第一数据库全量脚本,包括:[0223]通过所述生产环境的第一版本微服务程序,导出第一关系型数据库全量表脚本;[0224]通过所述第一版本微服务程序,导出第一非关系型数据库全量表脚本;[0225]扫描所述第一版本微服务程序,获取使用文档的第一预设对象的列表;[0226]获取所述第一预设对象的所有属性的名称、类型和值,生成并导出第一数据库全量脚本。[0227]可选的,通过生产环境的第一版本微服务程序,导出第一关系型数据库全量表脚本,包括:[0228]扫描所述第一版本微服务程序,获取使用表格的第二预设对象的列表,根据所述第二预设对象,形成第一数据库表;[0229]扫描所述第一版本微服务程序的微服务资源文件包,获取所有的目标文件,根据所述目标文件,形成第二数据库表;[0230]将所述第一数据库表和所述第二数据库表的并集确定为所述第一关系型数据库全量表脚本。[0231]可选的,通过所述第一版本微服务程序,导出第一非关系型数据库全量表脚本,包括:[0232]通过操作数据的框架springdata-jpa与数据库mongodb的结合,遍历文档对象以及文档对象里的枚举值和嵌套对象,生成并导出第一非关系型数据库全量表脚本。[0233]可选的,获得所述第一版本微服务程序对应的第一版本数据库的第二数据库全量脚本,包括:[0234]当数据库为关系型数据库时,通过关系型数据库提供的导出命令导出所述第一版本微服务程序对应的第一版本数据库的第二数据库全量脚本;或者[0235]当数据库为非关系型数据库时,导出所述非关系型数据库的数据,遍历所述数据解析出所述第一版本微服务程序对应的第一版本数据库的第二数据库全量脚本。[0236]可选的,所述处理模块52还用于在所述第一数据库全量脚本、第二数据库全量脚本中的枚举值以及所述属性的枚举值不一致的情况下,如果所述第一数据库全量脚本的枚举值有误,则纠正所述第一版本微服务程序;如果所述第二数据库全量脚本中的枚举值有误,则纠正所述第一版本微服务程序对应的第一版本数据库。[0237]可选的,获得预生产环境的第二版本数据库的脚本,包括:[0238]获得所述预生产环境的第二版本微服务程序的第三数据库全量脚本;[0239]获得所述第二版本微服务程序对应的第二版本数据库的第四数据库全量脚本;[0240]获得所述预生产环境中定义为枚举值的属性的枚举值或者打上枚举标签的属性的枚举值;[0241]在所述第三数据库全量脚本、第四数据库全量脚本中的枚举值以及所述属性的枚举值一致的情况下,获得第二版本的脚本。[0242]可选的,获得所述预生产环境的第二版本微服务程序的第三数据库全量脚本,包括:[0243]通过所述预生产环境的第二版本微服务程序,导出第二关系型数据库全量表脚本;[0244]通过所述第二版本微服务程序,导出第二非关系型数据库全量表脚本;[0245]扫描所述第二版本微服务程序,获取使用文档的第二预设对象的列表;[0246]获取所述第二预设对象的所有属性的名称、类型和值,生成并导出第一数据库全量脚本。[0247]可选的,通过所述预生产环境的第二版本微服务程序,导出第二关系型数据库全量表脚本,包括:[0248]扫描所述第二版本微服务程序,获取使用表格的第三预设对象的列表,根据所述第三预设对象,形成第三数据库表;[0249]扫描所述第二版本微服务程序的微服务资源文件包,获取所有的目标文件,根据所述目标文件,形成第四数据库表;[0250]将所述第三数据库表和所述第四数据库表的并集确定为所述第二关系型数据库全量表脚本。[0251]可选的,通过所述第二版本微服务程序,导出第二非关系型数据库全量表脚本,包括:[0252]通过操作数据的框架springdata-jpa与数据库mongodb的结合,遍历文档对象以及文档对象里的枚举值和嵌套对象,生成并导出第二非关系型数据库全量表脚本。[0253]可选的,获得所述第二版本微服务程序对应的第二版本数据库的第四数据库全量脚本,包括:[0254]在数据库为关系型数据库时,通过关系型数据库提供的导出命令导出所述第二版本微服务程序对应的第二版本数据库的第四数据库全量脚本;或者[0255]在数据库为非关系型数据库时,导出所述非关系型数据库的数据,遍历所述数据解析出所述第二版本微服务程序对应的第二版本数据库的第四数据库全量脚本。[0256]可选的,所述处理模块52还用于在所述第三数据库全量脚本、第四数据库全量脚本中的枚举值以及所述属性的枚举值不一致的情况下,如果所述第三数据库全量脚本的枚举值有误,则纠正所述第二版本微服务程序;如果所述第四数据库全量脚本中的枚举值有误,则纠正所述第二版本微服务程序对应的第二版本数据库。[0257]可选的,根据所述第一版本数据库的脚本和第二版本数据库的脚本,生成数据库升级脚本,包括:[0258]获得所述第一版本数据库的脚本和第二版本数据库的脚本的差异;[0259]根据所述差异生成数据库升级脚本。[0260]需要说明的是,该装置是与上述方法对应的装置,上述方法实施例中的所有实现方式均适用于该装置的实施例中,也能达到相同的技术效果。[0261]本发明的实施例还提供一种数据库升级设备,包括:处理器、存储有计算机程序的存储器,所述计算机程序被处理器运行时,执行如上述的方法。上述方法实施例中的所有实现方式均适用于该实施例中,也能达到相同的技术效果。[0262]本发明的实施例还提供一种计算机可读存储介质,存储指令,当所述指令在计算机上运行时,使得计算机执行如上述的方法。上述方法实施例中的所有实现方式均适用于该实施例中,也能达到相同的技术效果。[0263]本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。[0264]所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。[0265]在本发明所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。[0266]所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。[0267]另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。[0268]所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。[0269]此外,需要指出的是,在本发明的装置和方法中,显然,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本发明的等效方案。并且,执行上述系列处理的步骤可以自然地按照说明的顺序按时间顺序执行,但是并不需要一定按照时间顺序执行,某些步骤可以并行或彼此独立地执行。对本领域的普通技术人员而言,能够理解本发明的方法和装置的全部或者任何步骤或者部件,可以在任何计算装置(包括处理器、存储介质等)或者计算装置的网络中,以硬件、固件、软件或者它们的组合加以实现,这是本领域普通技术人员在阅读了本发明的说明的情况下运用他们的基本编程技能就能实现的。[0270]因此,本发明的目的还可以通过在任何计算装置上运行一个程序或者一组程序来实现。所述计算装置可以是公知的通用装置。因此,本发明的目的也可以仅仅通过提供包含实现所述方法或者装置的程序代码的程序产品来实现。也就是说,这样的程序产品也构成本发明,并且存储有这样的程序产品的存储介质也构成本发明。显然,所述存储介质可以是任何公知的存储介质或者将来所开发出来的任何存储介质。还需要指出的是,在本发明的装置和方法中,显然,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本发明的等效方案。并且,执行上述系列处理的步骤可以自然地按照说明的顺序按时间顺序执行,但是并不需要一定按照时间顺序执行。某些步骤可以并行或彼此独立地执行。[0271]以上所述是本发明的优选实施方式,应当指出,对于本
技术领域
:的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。当前第1页12当前第1页12
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献