数据库版本控制

说明

hsweb使用nashorn来定义模块的初始化,更新脚本(hsweb-starter.js)。在模块首次引入,或者发生版本更新时,会执行对应的代码,利用此功能,可以实现对数据库的版本控制。

定义脚本

在模块的 resources下创建hsweb-starter.js. 内容如下:
1
//组件信息
2
var info = {
3
groupId: "org.hswebframework",
4
artifactId: "hsweb-payment-pay",
5
version: "1.0.2", //当前版本
6
website: "http://payment.hsweb.io",
7
author: "zhouhao",
8
comment: "支付模块"
9
};
10
11
//版本更新信息
12
var versions = [
13
{
14
version: "1.0.1",//版本升级到1.0.1时执行
15
upgrade: function (context) {
16
var database = context.database;
17
//增加渠道供应商
18
database.createOrAlter("pay_order")
19
.addColumn().name("channel_provider").varchar(128).notNull().comment("渠道供应商").commit()
20
.addColumn().name("channel_provider_name").notNull().varchar(128).comment("渠道供应商名称").commit()
21
.comment("支付订单表").commit();
22
}
23
},
24
{
25
version: "1.0.2", //版本升级到1.0.2时执行
26
upgrade: function (context) {
27
var database = context.database;
28
database.createOrAlter("pay_order")
29
.addColumn().name("comment").varchar(2048).comment("说明").commit()
30
.comment("支付订单表").commit();
31
}
32
}
33
];
34
var JDBCType = java.sql.JDBCType;
35
36
//首次启动此模块的时候执行
37
function install(context) {
38
var database = context.database;
39
database.createOrAlter("pay_order")
40
.addColumn().name("id").varchar(32).notNull().primaryKey().comment("ID").commit()
41
.addColumn().name("order_id").varchar(128).notNull().comment("商户订单号").commit()
42
.addColumn().name("merchant_id").varchar(128).notNull().comment("商户ID").commit()
43
//.....省略了更多字段设置
44
.addColumn().name("status").varchar(16).notNull().comment("订单状态").commit()
45
.index().name("idx_order_id").column("order_id").unique().commit()//订单号唯一索引
46
.index().name("idx_order_merchant_id").column("merchant_id").commit()
47
.comment("支付订单表").commit();
48
}
49
50
function initialize(){
51
//首次使用此模块,在全部依赖安装完成后执行
52
}
53
54
//以下为固定的代码,无需修改
55
dependency.setup(info)
56
.onInstall(install)
57
.onUpgrade(function (context) { //更新时执行
58
var upgrader = context.upgrader;
59
upgrader.filter(versions)
60
.upgrade(function (newVer) {
61
newVer.upgrade(context);
62
});
63
})
64
.onUninstall(function (context) { //卸载时执行
65
66
}).onInitialize(initialize); //初始化
Copied!

执行流程

  1. 1.
    在应用启动完成后,会获取所有的hsweb-starter.js文件。
  2. 2.
    执行js并获取到模块信息。
  3. 3.
    根据模块信息判断模块是否安装或者更新。
  4. 4.
    执行对应的安装或者更新操作。
  5. 5.
    如果模块是首次执行,将会在全部模块安装完成后执行初始化操作。
Last modified 2yr ago