一、业务系统改造(项目组改造)
1. 系统管理源代码迁移
系统管理相关代码迁移到scp_sys微服务工程;
并按照认证中心要求进行改造;(具体改造内容请与架构组沟通)
2. 基础数据源代码迁移(例子)
以基础数据的【用户级数据字典】为例,说明如何迁移源代码到微服务工程:
(一)数据库迁移
(1)表结构迁移
A). 导出Oracle建表脚本
B) 导入ER模型
C) 从ER模型导出MySql建表脚本
D) 创建视图:V_MD_CODE_DICT和V_SYS_UESER
(2)表数据迁移
A)导数据:md_code_type 、md_code_dict 、ipf_ccm_dict和ipf_ccm_dict_row
(二).后台代码迁移
(1) Controller、Mapper、Service迁移到
sys_md_business工程对应目录
A)UserMdCodeTypeController.java、UserMdCodeDictController.java
文件直接拷贝到sys_md_business
的src/java /com/gillion/fms/md/web
目录;
B)UserMdCodeTypeMapper.java、UserMdCodeDictMapper.java
文件直接拷贝到sys_md_business的src/java /com/gillion/fms/md/mapper
目录;
C)UserMdCodeTypeServiceImpl.java、UserMdCodeTypeService.java、UserMdCodeDictServiceImpl.java、UserMdCodeDictService.java
文件直接拷贝到sys_md_business的src/java/com/gillion/fms/md/service
目录;
D)UserMdCodeTypeMapper.xml、UserMdCodeDictMapper.xml
文件直接拷贝到sys_md_business
的src/resources/com/gillion/fms/md/mapper
目录;
(2)Example、domain迁移到sys_md_entity工程对应目录
A)UserMdCodeTypeExample.java、UserMdCodeType.java、UserMdCodeDictExample.java、UserMdCodeDict.java文件直接拷贝到sys_md_entity的src/java /com/gillion/fms/md/domain目录;
(3)后台调用系统管理的代码改造为微服务调用方式
A) 改造前:系统管理拆分为独立微服务后,直接调用系统管理相关代码编译会报错。
Office roleOffice = SysUserUtil.getCurrentLoginRoleSysOffice();
String settleOfficeTemp = roleOffice.getSettleOffice().getOfficeCode();
B)改造后:需要改造为微服务调用方式,系统管理微服务开放对应接口,通过接口调用。(具体改造方法请咨询架构组,这个例子里面只是简单处理跳过这个错误)
(三).前台代码迁移
(1) Js和html文件迁移到scp_www\scp_md_www对应目录
A)entity-UserMdCodeType_Default.js、entity-UserMdCodeDict_Default.js
文件直接拷贝到scp_www\scp_md_www\static\app\nls
目录;
B)UserMdCodeType_Default.js、UserMdCodeDict_Default.js
文件直接拷贝到scp_www\scp_md_www\static\app\validation\generated
目录;
C)userMdCodeTypeManage.js、userMdCodeTypeAdd.js、userMdCodeTypeEdit.js、userMdCodeTypeView.js、userMdCodeDictManage.js、userMdCodeDictAdd.js、userMdCodeDictEdit.js、userMdCodeDictView.js
文件直接拷贝到scp_www\scp_md_www\static\app\fms\md
目录;
D)userMdCodeTypeManage.html、userMdCodeTypeAdd.html、userMdCodeTypeEdit.html、userMdCodeTypeView.html、userMdCodeDictManage.html、userMdCodeDictAdd.html、userMdCodeDictEdit.html、userMdCodeDictView.html
文件直接拷贝到scp_www\scp_md_www\html\fms\md
目录;
(四).前台代码改造
(1) Html改造:script中data-main的内容中最前面拼入$md.path,如下图:
注:其中$md是基础数据模块的上下文变量
修改前:
<script src="/bower_components/requirejs/require.js" data-main="/static/app.js" data-bootstrap-modules="['fms/md/userMdCodeTypeManage']"></script>
修改后:
<script src="/static/app/appconfig.js"></script>
<script>
document.write('<script src="/bower_components/requirejs/require.js" data-main="' + $md.path + '/static/app.js" data-bootstrap-modules="[\'fms/md/userMdCodeTypeManage\']"><\/script> ');
</script>
(2) js改造:访问html的地方在前面拼入$config.path,如下图:
修改前:var url = "/html/fms/md/userMdCodeDictEdit.html";
修改后:var url = $config.path+"/html/fms/md/userMdCodeDictEdit.html";
(五).菜单迁移(已迁移)
(1) 查询菜单数据并导出
A) P/L SQL执行查询sys_resource和sys_resource_rel的语句
select * from sys_resource a where a.bo_name in ('UserMdCodeType','UserMdCodeDict');
select * from sys_resource_rel b where b.sys_resource_id in
(select a.sys_resource_id from sys_resource a where a.bo_name in ('UserMdCodeType','UserMdCodeDict'));
(2) 导入菜单数据
删除Oracle导出菜单权限脚本中Oracle专用的语句,如下图:
在scp_sys数据库执行上图的菜单插入脚本
(3) 更新菜单数据
–/html的权限url前面加上微服务的上下文环境变量/scp_md_www
UPDATE sys_resource SET url = REPLACE(url, '/html', '/scp_md_www/html') where bo_name in ('UserMdCodeType','UserMdCodeDict') and url like '/html%';
3. FMS源代码迁移
FMS源码迁移
参考【基础数据】例子,迁移FMS业务相关源代码到scp_fms微服务工程;
此微服务工程连接Oracle数据库,因此在pom文件中引入Oracle驱动,且.yml配置mq的查询语法用Oracle语法;
4.BMS源代码迁移
BMS源码迁移
参考【基础数据】例子,迁移FMS业务相关源代码到scp_bms微服务工程;
此微服务工程连接Oracle数据库,因此在pom文件中引入Oracle驱动,且.yml配置mq的查询语法用Oracle语法;
二、Nginx配置
NGINX配置
Nginx文件放在svn如下位置:http://172.16.0.35/svn/WYCJ_FMS/02_Source/04_Source/scp_dev/nginx。
1)修改根目录配置
2)微服务配置
三、附录:
1. 微服务项目部署结构
1)微服务项目后台启动多个微服务,每个微服务连接各自的数据库,每个微服务启动后注册到EDS服务器;前端只有一个入口,用户使用起来跟单系统没有区别;后端请求统一发送到Nginx服务器,Nginx服务转发后端请求到EDS服务器,由EDS服务器调度到对应的应用服务器;
2)
用户权限通过独立的微服务管理(认证中心+用户中心),认证中心服务登录验证和权限验证等核心处理逻辑,用户中心负责用户权限数据的变更(添加用户,修改授权等等);
2. 微服务项目代码目录结构
微服务模式环境介绍见gschool文档:http://gschool.glpaas.gillion.com.cn/?page_id=7880,这里简要说明如下:
(一).后端目录结构
A)后端有多个系统,每个系统可独立部署,连接独立的数据库;
B)每个系统分为API和Business两个工程
C)系统Business部分对应的工程编译为war包
(二).前端目录结构
A)hbias_www是前端静态资源主目录(hbias是项目代码),红框内容为前端框架,每个微服务有一个独立的www目录,包括前端html和js目录;
B)前端控件代码在外层目录static目录的app/framework子目录下;
3. 搭建独立的系统管理微服务(认证中心+用户中心)
1)认证中心初始源代码(待架构组升级到新版)
2)用户中心初始源代码(待项目组改造)
4. SCP项目微服务工程初始化(任务中心scp_task,状态池scp_status,船代业务scp_sa,驳运业务scp_fcos)
(一).后端文件:
A) 目录名:scp_sa ->scp_task
B) pom.xml:scp_sa ->scp_task
C) .yml:
服务名:scp_sa_business ->scp_task_business
Tomcat端口: port: 8087-> port: 8088
netty端口: port: 10149-> port: 10111
连接串:daili_scp_sa->daili_scp_task
D) SaApplication.java->TaskApplicatioin.java
(二).前端文件:
A) 目录名:scp_sa_www ->scp_task_www
B) app.js:$sa.path -> $task.path
C) config.properties.js:添加$task相关变量,设置当前上下文变量
D) 外层目录appconfig.js:添加$task相关变量
(三).springBoot启动方式:
A)创建启动配置
B)每次选择一个启动配置,点调试按钮启动
注意:必须至少启动认证中心(scp_authentication)和用户中心(scp_sys)才能登录
5. 移植登录页、主页和CSS样式
1.迁移login.html和index.html,以及loginModule.js和indexModule.js
2.迁移resource/css和resource/images
6. SCP项目菜单迁移说明(Oracle->MySql)
(一).同步数据库表结构SYS_OFFICE/SYS_USER/SYS_ROLE,增加SCP项目特有字段;
见sql脚本文件alter_tables.sql
(二).导入权限相关数据(组织、角色、用户、权限)
使用P/L SQL工具连接fmsuser数据库(Oracle)导出系统管理插入脚本
导出的sql脚本文件如下图
对导出的脚本sys_resource.sql和sys_resource_rel.sql做去重处理(已处理)
因为Oracle数据库中sys_resource.url这个字段是大小写区分的,导入到MySql时大小写不区分导致有如下重复数据(需要在脚本中删掉一条错误的数据,并在sys_resource_rel中删除对应的行)
删除Mysql中原有的权限相关数据
按如下表名的顺序执行插入数据脚本
更新导入后的Mysql数据
–更新错误的数据
update sys_user set is_active='Y', is_deleted='N' ;
update sys_role set is_deleted='N' ;
update sys_office set is_active='Y', is_deleted='N' ;
update sys_role a set a.sys_office_id='3c5e1b535d034d48acfc304d0df8fbf7' where a.sys_role_id='49c0b3ba939042069c1d40ccc7541b5b';
–更新系统管理相关菜单url的上下文路径
UPDATE sys_resource a SET a.url = REPLACE(url, '/html/platform/', '/scp_sys_www/html/platform/') where a.url like
‘/html/platform/%.html’;
–更新基础数据相关菜单url的上下文路径
UPDATE sys_resource a SET a.url = REPLACE(url, '/html/fms/md/', '/scp_md_www/html/fms/md/') where a.url like '/html/fms/md/%.html';