📄 适配东方通&达梦
内部资料,请刷新扫码登录
特别说明
感谢群友 高清岭#202402281020 大佬 分享的文档,其他版本能否适用请自行参考
# 国产化环境
测试环境:windows10
jdk1.8
pigx5.4.0 单体版
中间件:东方通 TW-企业 7.0.4.9 -M3
数据库:达梦 V8.1.1.45_20191121
# 数据库转换
用达梦提供的转换工具转换,中间出现字段类型、长度问题,按对应调整就行
# 程序适配
1、修改 pigx-cloud 项目中 common-log 模块的 SysLogUtils 类,大概在 71 行左右,request.getParameterMap()方法参数值在其他容器不允许修改
public SysLogDTO getSysLog() {
HttpServletRequest request = ((ServletRequestAttributes) Objects
.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
SysLogDTO sysLog = new SysLogDTO();
sysLog.setLogType(LogTypeEnum.NORMAL.getType());
sysLog.setRequestUri(URLUtil.getPath(request.getRequestURI()));
sysLog.setMethod(request.getMethod());
sysLog.setRemoteAddr(ServletUtil.getClientIP(request));
sysLog.setUserAgent(request.getHeader(HttpHeaders.USER_AGENT));
sysLog.setCreateBy(getUsername());
// 获取服务名称
sysLog.setServiceId(SpringUtil.getProperty("spring.application.name"));
// get 参数脱敏
XXXLogProperties logProperties = SpringUtil.getBean(XXXLogProperties.class);
//@TODO 修复request.getParameterMap()其他容器不允许改,tomcat会报错
Map<String,String[]> paramterMap = new HashMap<>();
BeanUtil.copyProperties(request.getParameterMap(),paramterMap);
Map<String, String[]> paramsMap = MapUtil.removeAny(paramterMap,
ArrayUtil.toArray(logProperties.getExcludeFields(), String.class));
sysLog.setParams(HttpUtil.toParams(paramsMap));
return sysLog;
}
2、修改单体项目 upms-biz 模块的 pom 文件,将 packaging 改为 war
<packaging>war</packaging>
3、注释掉 undertow 容器的引入,大概 156 行
<!-- @TODO 打war包时需要注释掉-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-undertow</artifactId>-->
<!-- </dependency>-->
4、plugins 加入 web.xml 忽略,否则打 war 报错
<!-- @TODO 忽略web.xml不存在提示,打war包时用到-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
5、修改 upms-biz 模块的启动类,类继承自 SpringBootServletInitializer
public class XXXAdminApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(XXXAdminApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(XXXAdminApplication.class, args);
}
}
6、修改 application.yml,修改端口为 tongweb 端口,应用名称 admin 不要改,如果修改,前端改动地方挺多的
server:
port: 8083 #TODO 打war包 此处修改为容器使用的端口
servlet:
context-path: /admin #TODO 打war包此处和部署应用名一致
7、修改 application-dev.yml,注释掉原 mysql 连接,加入达梦连接,关闭 flowable 和 quartz 的自动更新表功能
## spring security 配置
security:
oauth2:
client:
ignore-urls:
- /webjars/**
- /v3/api-docs/**
- /doc.html
- /swagger-ui.html
- /swagger-ui/**
- /swagger-resources
- /token/check_token
- /error
- /druid/**
- /actuator/**
- /code/**
# 前端密码登录解密密钥
gateway:
encodeKey: pigxpigxpigxpigx
# 数据源
spring:
redis:
host: xxx-redis
# 数据库索引 避免和微服务 PIGX 冲突
database: 9
# 密码
password:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
# TODO mysql数据库
# driver-class-name: com.mysql.cj.jdbc.Driver
# url: jdbc:mysql://xxx-mysql:3306/xxx_boot?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&allowMultiQueries=true&nullCatalogMeansCurrent=true
#TODO dm数据库
driver-class-name: dm.jdbc.driver.DmDriver
url: jdbc:dm://xxx-mysql:5236?schema=SYSDBA&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8
username: root
# username: SYSDBA
password: 123456
stat-view-servlet:
enabled: true
allow: ""
url-pattern: /druid/*
filter:
stat:
enabled: true
log-slow-sql: true
slow-sql-millis: 10000
merge-sql: false
wall:
config:
multi-statement-allow: true
# TODO 不加语句会有警告
validation-query: select 1
# @TODO 达梦数据库会报错
quartz:
jdbc:
initialize-schema: never
# 本地文件系统
file:
local:
enable: true
basePath: /Users/xxx/Downloads/img
# @TODO 关闭flowable自动更新数据库表,达梦数据库适配
flowable:
database-schema-update: none
# 数据操作相关配置
xxx:
mybatis:
# 跳过日志输出
skip-table:
- qrtz_
- act_
8、后端正常打包,如果报错将 root->clear->install 一下,然后用 upms-biz 模块打 war 包,打包后也需要操作,将打好的 war 包,用压缩包打开,找到 WEB-INF\lib\flowable-engine-common-6.8.0.jar,拖出来将里边的类 org\flowable\common\engine\impl\AbstractEngineConfiguration.class、AbstractEngineConfiguration$1.class 两个文件删除,项目里已对该类重写
9、至此后端适配完,前端不用做修改,前端打包和正常部署 tomcat 一样,用 idea 或 eclipse 新建空的普通 web 项目,然后打 war 包,将前端打包后的 dist 文件夹内容拖进 war 包即可
10、打包后两个 war 包正常部署到东方通,如果出现 put、delete 不能请求,修改东方通参数,默认好像禁用了 put、delete,打开就行了
# 存在问题
- 日志查看曲线图有问题,需要调整 sql 语句,未做
- 工作流可能存在问题,感觉和加载 jar 包顺序有关,重启中间件 10 次有 3 次出了问题,都在工作流方面,未做适配
- 其他暂时没发现问题,pigx 功能都能正常用