liuquibase(Jhipster)更改数据结构,越过MD5SUM校验,数据库字段以及实体类字段进行增减修改

1 篇文章 0 订阅
0 篇文章 0 订阅

前言:liuquibase使用changelog来管理我们的数据库字段,当我们使用Jhipster生成项目的时候,往往需要我们配合着JDL或者JH来使用创建实体类和数据库中相应的表,就目前讲的部分来说liuquibase对开发者而言还是很友好的,但是当你需要修改数据库字段和实体类字段相对应的jdl文件或者jh文件之后,运行命令jhipster import-jdl xx.jdl文件之后,再启动项目就会出现一些启动报错的问题,当你修改了数据字段之后,在你点击启动项目的时候,就会出现以下错误:
liquibase.exception.ValidationFailedException: Validation Failed:
1 change sets check sum
config/liquibase/changelog/20190309081717_added_entity_Systemlogs.xml::20190816-3::cbl was: 1: but is now: 7:4563239c4730e40891cfe3730e1ad582;
图片说明:
启动报错说明
然后我们就无法正常启动项目,并且让jhipster或者说liuquibase让我们顺利修改数据库的字段.
因为每一次修改字段都会出现这种问题,如果启动服务的人不了解不知道怎么解决问题的话,那么项目就无法正常启动,所以为了以后的运维方便,也为了提高效率,分享一下自己在学习过程中解决当前问题的几种方法:

第一种方法:

在项目启动之前,将数据库删除,让项目在启动的时候直接创建新的表,让库中的DADABASECHANGELOG表对应的数据清楚,这样就不存在启动的时候liuquibase存在MD2SUM校验的问题.
这一种方法适合项目还处于开发阶段,并且数据库中不存在重要的测试数据的情况下使用.
只要是处于开发阶段的话使用这种方法是最快速解决当前启动问题的并且顺利完成对数据库字段的修改的,唯一的缺点就是要注意库中的数据是否重要.

第二种方法:

因为项目在启动的过程中会报错,告诉你错误原因就是MDSUM校验错误,并且会把相应的MD5SUM数据告诉你,这个是否你只需要将打印出来的MD5SUM数据复制,粘贴到数据库的DATABASECHANGELOG表中id对应的数据,其中的MD5SUM列下面即可,这样就相当于把当前项目中新修改的add_entity.xml文件相对应的MD5SUM数据进行了替换,这样在项目启动的时候就可以顺利执行add_entity.xml文件,但是这样只是修改了实体类而数据库的对应字段是不会修改的,这个时候就需要我们自己手动去数据增加字段,这样你所做的字段修改就能成功生效,并且正常使用了.
修改对应的MD5SUM验证数据
第二种方法对于开发人员而言还是挺友好的,但是这种方法需要你拥有数据库权限,并且项目是由你来发布,或者运维告诉你的日志打印出来的MD5SUM数据,所以这种方法对运维人员还是存在一定的要求,所以这种方法只建议开发者在本地调试项目的时候使用,线上使用的话对开发者和运维人员都有一定的客观要求.

第三种方法

第三种方法相比较于前两种,我们需要删除数据库,不需要知道当前add_entity.xml文件想对应的MD5SUM数据,只需要我们用另外一个一种JHIPSTER提供的生成器修改字段,还有在add_entity.xml文件中做相对应的修改,这样即便是线上的数据库或者现在存在重要数据的数据库,也可以在项目启动的时候实现数据库字段的修改.
当然第三种方法相比较于前两种方法操作其实比较繁琐,并且我们不需要进行jhispter import-jdl xxx.jdl 的操作
具体的流程会使用图文说明
首先进入相应的项目目录下,运行命令行 jhistper entity xx , xx对应的是相应的实体类名,运行命令之后就唤起jhispter的生成器:
为项目相对应的实体类添加字段
以上操作完成之后进入下一个流程:
添加完字段继续往下走
在选择完是否为字段添加关联之后,我们就进入的选择覆盖文件的环节,这个过程是将原本使用jhipster import-jdl 导入运行的时候生成的各种文件,让你来选择是否生成
选择的过程如下图:
选择覆盖文件
注意在这一步中有部分的选择会比较多,但是我们只需要再选择xxx_add_entity_xxx.xml文件的是否选择不覆盖即可;
选择文件覆盖之后我们在命令行的操作就基本结束了,我们就需要进入我们的项目当中了.
首先我们要找到没有进行覆盖的文件xxx_add_entity_xx.xml文件:
找到对应的changeloge文件
当前的这个文件的路径一般都是在项目的:src\main\resources\config\liquibase\changelog* 中;
找到这个changelog.xml文件之后我们打开这个文件并且到最底部(也可以不在最底部):
在文件底部添加changeset标签节点
按照以上方式修改这个文件,注意在这个文件中我们是可以看到存在两个changeset标签的,而两者的区别就是,最初的那个changset是负责创建表的,而下面的这个changeset是负责修改字段的.
当然添加字段以外,我们还有修改数据库字段等相应作.
修改字段的操作方法:
< changeSet id=“20190817” author=“cbl”>
<modifyDataType tableName=“test” columnName=“test’” newDataType=“varchar(50)” schemaName=“public”/>
</changeSet>
删除字段的方法:
\ <!--
<dropColumn tableName=“test” columnName=“test”/>
</changeSet>\
添加自己所需的标签节点后,直接运行项目就会发现项目正常启动并且数据库字段也进行了正常的修改.
这样的方法就达到了我们所需要的结果,虽然操作起来比较麻烦,但是这样子实用性大大增强,对运维的能力需求也是大大的降低,运维人员只需要进行简单的项目部署即可.
备注说明:重复测试后发现,第三种方法中,如果新增加字段的操作,不是同一天重复操作是不会出现询问是否覆盖原add_XXentity.XML的,会自动重新创建一个新的(具体规则还需要了解)XML文件,但是原理是一样的,这个时候只需要把新创建的XML文件删除,在原本的文件上按照步骤修改即可(其实也可以自己新增一个文件来修改,在原文件上修改,只是为了规范容易查看,如果统一管理的话,新增一个文件也是很好的方案)。
以上的三种方法就是目前我所知道的修改数据字段和实体类字段能正常生效的方法,如果有什么错误的地方希望可以指出,让我及时更改过来.或者有什么其他的方法也希望有人能分享出来,毕竟jhispter在中国而言使用的开发者还是比较稀少的,jhipster的进步需要大家的努力.

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值