zoukankan      html  css  js  c++  java
  • 【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="2018041320" 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 ,祝成功:)

    声明:本博文为本人实际操作经验写成,转载请注明出处,或者别让我看到

  • 相关阅读:
    oracle11g安装客户端检查先决条件失败
    WinForm textbox 只允许输入数字
    Oracle存储过程
    Oracle游标
    Oracle之PL/SQL流程控制
    Oracle 变量
    log4net 使用
    Python Matplotlib 画图显示中文问题
    Oracle 数据迁移到 SQL Server
    C结构体【转】
  • 原文地址:https://www.cnblogs.com/hellxz/p/8819503.html
Copyright © 2011-2022 走看看