数据自动升级说明: 版本列表配置: 首先要在软件代码中配置所有的软件版本列表,新增版本后,必须在com.forgon.Constants.SOFTWARE_VERSION_ARRAY字段添加进去,此字段为数组类型 如下示例: public final static String[] SOFTWARE_VERSION_ARRAY = new String[] { "3.3.8,3.3.9,3.3.10"};// 版本列表 此处3.3.10为最新版本。 版本之间的升级语句配置: 如果两个版本之间有需要执行的sql语句,那么必须在webapp\dataUpdater\sqls目录下面新建对应版本的升级语句 如下示例: 假设版本3.3.8到版本3.3.9需要执行升级sql,那么需要新建3.3.8_3.3.9.sql文件,将要执行的sql语句写入该文件。 查看升级结果: 数据升级之后,后台会生成详细的升级日志,放在webapp\dataUpdater\logs\updateReport.txt里面 如下示例: --------------------数据升级开始(3.3.8->3.3.10)-------------------- --------------------版本升级(3.3.8->3.3.9)开始-------------------- --------------------SQL升级任务(3.3.8->3.3.9)开始-------------------- 信息 2015-09-10 14:50:05 从C:/work/workspace lunaSR2/forgon-ssts/ssts-web/src/main/webapp/dataUpdater/sqls/3.3.8_3.3.9.sql执行升级语句! 信息 2015-09-10 14:50:05 sql执行完毕! UPDATE receiveRecordItem SET goodsName = (SELECT CASE WHEN specification='' THEN name WHEN specification is null THEN name ELSE name + '['+specification+']' END FROM DiposableGoods where id= diposableGoodsID) WHERE goodsName is null and diposableGoodsID is not null 信息 2015-09-10 14:50:06 更新版本为3.3.9! --------------------版本升级(3.3.8->3.3.9)成功-------------------- --------------------版本升级(3.3.9->3.3.10)开始-------------------- --------------------SQL升级任务(3.3.9->3.3.10)开始-------------------- 信息 2015-09-10 14:50:06 没有找到升级sql文件! 信息 2015-09-10 14:50:06 更新版本为3.3.10! --------------------版本升级(3.3.9->3.3.10)成功-------------------- --------------------数据升级结束(3.3.8->3.3.10)-------------------- 如果版本升级还涉及到业务代码的调用(升级逻辑较为复杂,不能使用sql语句完成),那么可以在com.forgon.disinfectsystem.maintain.basic.service.MaintainManagerImpl.UpdateData_internal(UpdateDataContext updateDataContext) 方法中增加相应版本的调用,如下示例代码: private boolean UpdateData_internal(UpdateDataContext updateDataContext) { DataUpdater dataUpdater = updateDataContext.getDataUpdater(); String name = dataUpdater.getCurrentUpdateVersionsName(); switch (name) { case "3.3.8_3.3.9": UpdateData_3_3_8__3_3_9(updateDataContext); break; case "3.3.9_3.3.10": UpdateData_3_3_9__3_3_10(updateDataContext); break; } return false; } private void UpdateData_3_3_8__3_3_9(UpdateDataContext updateDataContext) { // 升级代码 } private void UpdateData_3_3_9__3_3_10(UpdateDataContext updateDataContext) { // 升级代码 } -------------------------------旧的数据库处理------------------------------- 旧的数据库,因为没有数据版本存在,启动时会直接更新为软件最新版本,如果需要在旧版本数据库上进行升级数据,需要手动将起始版本写入数据库 以下是sqlserver的执行语句,请务必保证执行成功! IF NOT EXISTS (SELECT * FROM KeyValue WHERE kv_key='software.dataVersion') BEGIN INSERT INTO [KeyValue] (kv_key ,scope ,value) VALUES ('software.dataVersion' ,10000 ,'3.3.8') END 以下是oracle的执行语句,请务必保证执行成功! -------------------------------旧的数据库处理------------------------------- 注意事项: 通过调用方法来升级时,尽量考虑以后代码本身升级后的兼容性,避免最新的版本代码本身不兼容以前写的升级方法。最好是利用最底层的sql语句,和普通的计算与逻辑处理,不要依赖于PO对象和业务类的方法,因为业务方法可能会经常重构,PO也可能会重构。 在升级代码调用时,要增加详细的日志输出,这样在查看升级结果时,现场人员可以知道和确认执行了哪些升级操作。