【Jhipster】升级/修改 数据库结构
前提
1、jhipster环境,jdk1.8,yeoman,node.js安装环境参考官方wiki,环境问题参考我的博客,如果出现注册中心空白页,请参考博客
2、首先需要启动jhipster基础服务,jhipster-registry-master,uaa,gateway,新建一个微服务应用,参考官方文档
3、创建实体,cd到微服务目录,自动创建数据库,参考官方文档,这里我们创建一个clazz实体,本文主要修改这个实体,有一个classNo int型,className Stirng型
4、还需要知道how to 查询dev环境的数据库,比较简单,简单讲下:启动新建的微服务应用,查看端口号(这里以8081举例),访问 localhost:8081/h2-console


上图中就是我们熟悉的查询界面了,接下来我们看看修改数据库
正文
鉴于jhipster升级/修改数据库结构有 三种方式,这里分开来介绍下
使用entity sub-generator 更新数据库
1、cd到需要修改的微服务应用项目文件夹
2、运行entity sub-generator:命令 yo jhipster:entity 需要修改的实体名(第一次是创建,如果已经存在则提示修改)

3、根据需要选择添加字段到这个实体,还是删除字段,这里没有修改,可以使用remove之后再添加,这里选添加做测试,添加一个名为class_desc,字段类型为String

不继续输入n,当然了如果想继续添加也无所谓,后边添加约束也可以不添加

此时这个实体就修改完毕了,同时自动创建 changelog 到 src/main/resources/config/liquibase/changelog目录中,并且自动添加到src/main/resources/config/liquibase/master.xml文件中,这里就是liquibase等待这个项目启动去改变数据库的事了。
这一切都是自动发生的,如果仅想简单的修改表结构,可以这样,也不用继续看下文了,启动项目即可
手动编辑 changelog 更新数据库
当然这种一看就是最麻烦的那种,其实不难
1、修改jpa实体,比如我现在想为clazz实体和数据库添加一个字段class_test,类型为String

2、编写changelog文件
创建 changelog文件到 src/main/resources/config/liquibase/changelog 命名格式为yyyMMddHHmmss_描述.xml(可以少写一些),例如这里就用201804131020_modify_entity_Clazz.xml,参考官方文档
<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> <property name="now" value="now()" dbms="h2"/> <property name="now" value="now()" dbms="mysql"/>
<property name="autoIncrement" value="true"/> <property name="floatType" value="float4" dbms="postgresql, h2"/>
<property name="floatType" value="float" dbms="mysql, oracle, mssql"/> <!--
add column class_test to table clazz
-->
<changeSet id="" author="hellxz"> <!--注意,这个id必须为当前时间的值,格式为:yyyyMMddHHmmss,否则启动会报错-->
<addColumn tableName="clazz">
<column name="clazz_test" type="varchar(50)"/>
</addColumn>
</changeSet>
<!--下边的这些是增删改查的一些写法,可以参考一下 -->
<!--
modify table clazz column from class_no to class_id
-->
<!-- <changeSet id="201804131020" author="hellxz">
<renameColumn tableName="clazz" oldColumnName="class_no" newColumnName="class_id"/>
</changeSet> -->
<!--
modify table clazz column class_id from integer datetype to varchar
-->
<!-- <changeSet id="201804131105" author="hellxz">
<modifyDataType tableName="clazz" columnName="class_id" newDataType="varchar(50)" schemaName="public"/>
</changeSet> -->
<!--
drop column class_id from table clazz
-->
<!-- <changeSet id="201804131113" author="hellxz">
<dropColumn tableName="clazz" columnName="class_id"/>
</changeSet> -->
<!--
add new column class_info datatype varchar
-->
<!-- <changeSet id="201804131141" author="hellxz">
<addColumn tableName="clazz">
<column name="class_id" type="varchar(255)"/>
</addColumn>
</changeSet> -->
</databaseChangeLog>
3、将上边修改的文件路径添加 changelog 到 src/main/resources/config/liquibase/master.xml中
<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd"> <!-- jhipster-needle-liquibase-add-changelog - JHipster will add liquibase changelogs here -->
<!-- jhipster-needle-liquibase-add-constraints-changelog - JHipster will add liquibase constraints changelogs here -->
<include file="config/liquibase/changelog/201804131020_modify_entity_Clazz.xml" relativeToChangelogFile="false"/>
</databaseChangeLog>
4、重新启动微服务应用,如果没有error,请进入h2-console查看,
下边是正常情况下的数据库情况

使用Maven liquibase:diff更新数据库
最后这种没有尝试成功,不知道哪步弄错了,大家可以参考
开发流程如下
修改jpa实体(增删字段,修改关联关系等)
编译程序
运行
mvnw liquibase:diff生成变更日志在
src/main/resources/config/liquibase/changelog目录查看变更日志,删除多余更新内容,保留必要更新,重命名文件为有意义文件名,比如
20161012021042_modify_name_length.xml,并添加到src/main/resources/config/liquibase/master.xml重启生效
问题解决
1、启动项目输出如下:

解决办法:
- 进入刚才修改的changelog文件中,请修改刚才写的id为当前时间值yyyyMMddHHmmss,分钟不能差,秒也可以不写,重启应用试验
- 注意如果修改之后还是这样,请查看
master.xml中是否include其他时间已经过期的文件,注释掉即可
2、出现如下图问题

这个问题是说之前我们已经创建了这个字段,进入h2-console查看,的确存在

3、对于每次启动都会报错这个错误,还有种简单粗暴的方法是删除target ,祝成功:)
声明:本博文为本人实际操作经验写成,转载请注明出处,或者别让我看到
【Jhipster】升级/修改 数据库结构的更多相关文章
- Magento模块升级修改数据库表结构
Magento支持在模块中创建.删除.更新数据库表及字段.通过该方式,在插件开发的过程中,添加和修改字段变成了一件非常轻松的事情.只需要修改模块的版本号,同时在文件中添加一个符合命名规则的脚本就可以了 ...
- EF测试自动修改数据库结构
1.配置类 <connectionStrings> <add name="test1" connectionString="Data Source=.; ...
- MySql数据库在表中添加新字段,设置主键,设置外键,字段移动位置,以及修改数据库后如何进行部署和维护的总结
1,为当前已有的表添加新的字段 alter table student add studentName varchar(20) not null; 2,为当前已有的表中的字段设置为主键自增 alter ...
- GreenDao数据库结构升级
1.先用GreenDao工具类编写自动创建代码,按照升级后的最新数据库结构来编写 2.GreenDao工具自动生成的代码覆盖到项目里去 3.在项目里找到对应的自动生成的数据库DaoMaster类 在D ...
- 用 Flask 来写个轻博客 (8) — (M)VC_Alembic 管理数据库结构的升级和降级
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 Alembic 查看指令 manager db 的可用选项 ...
- 【SQL Server复制】数据库复制:修改表结构、新增表、新增存储过程 会被复制到订阅服务器?
转自:https://www.cnblogs.com/happyday56/p/3849018.html 关键字:sql server复制 [SQL Server高可用性]数据库复制:修改表结构.新增 ...
- 07_MySQL修改数据库的表结构
修改数据库的表结构
- 数据库遇到的问题——mysql在线修改表结构大数据表的风险与解决办法归纳
互联网应用会频繁加功能,修改需求.那么表结构也会经常修改,加字段,加索引.在线直接在生产环境的表中修改表结构,对用户使用网站是有影响. 以前我一直为这个问题头痛.当然那个时候不需要我来考虑,虽然我们没 ...
- SQL Server 不清空数据,修改数据库字段、结构,阻止保存要求重新创建表的更改
当数据库有数据修改数据库字段时,默认是阻止的! 工具---选项---设计器---阻止保存要求重新创建表的更改(取消钩)
随机推荐
- vuex2中使用mapMutations/mapActions报错解决方法 BabelLoaderError: SyntaxError: Unexpected token
在尝鲜vuex2时,发现vuex2增加了 mapGetters 和 mapActions 的方法,借助stage2的 Object Rest Operator 特性,可以写出下面代码:methods: ...
- poj 3696 The Luckiest Number
The Luckiest Number 题目大意:给你一个int范围内的正整数n,求这样的最小的x,使得:连续的x个8可以被n整除. 注释:如果无解输出0.poj多组数据,第i组数据前面加上Case ...
- 设计模式之 原型模式详解(clone方法源码的简单剖析)
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 原型模式算是JAVA中最简单 ...
- Mysql 相关操作
1.用户管理 创建用户 create user '用户名'@'IP地址' identified by '密码'; 删除用户 drop user '用户名'@'IP地址'; 修改用户 rename us ...
- EVA 4400存储硬盘故障数据恢复方案和数据恢复过程
EVA系列存储是一款以虚拟化存储为实现目的的HP中高端存储设备,平时数据会不断的迁移,加上任务通常较为繁重,所以磁盘的负载相对是较重的,也是很容易出现故障的.EVA是依靠大量磁盘的冗余空间,以及故障后 ...
- js前端对后台数据的获取,如果是汉字则需要添上引号
js前端对后台数据的获取,如果是汉字则需要添上引号
- Vue 2.x + Webpack 3.x + Nodejs 多页面项目框架(下篇——多页面VueSSR+热更新Server)
Vue 2.x + Webpack 3.x + Nodejs 多页面项目框架(下篇--多页面VueSSR+热更新Server) @(HTML/JS) 这是Vue多页面框架系列文章的第二篇,上一篇(纯前 ...
- os.getcwd()、sys.path[0]、sys.argv[0]和__file__的区别,终于弄清楚了
os.getcwd().sys.path[0].sys.argv[0]和__file__的区别 要分清这几个的区别与使用条件,实际测试一下是最准确的. 设计测试方法: 一个主模块用来运行,一个子模块用 ...
- Python-迭代器&生成器&装饰器&软件目录结构规范-Day5
目录Day-Python-迭代器&生成器 21.生成器 21.1.生成器引入 21.2.生成器作用 31.3.创建生成器的方法 31.4.用函数来实现复杂的生成器 51.5.把函数变成生成器通 ...
- 获取apk项目的MD5值和SHA1值
一些可说可不说的话: * 以前有一个更简单的方法,在as的右边工具栏的 gradle 面板中可以很方便的获取到: * 上次用也是在2年前,时间长了给忘记了,不过我记得我当时写了笔记,这会笔记不在身边, ...