适配东方通&达梦

国产化环境

测试环境: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-INFlibflowable-engine-common-6.8.0.jar,拖出来将里边的类 orgflowablecommonengineimplAbstractEngineConfiguration.class、AbstractEngineConfiguration$1.class 两个文件删除,项目里已对该类重写

9、至此后端适配完,前端不用做修改,前端打包和正常部署 tomcat 一样,用 idea 或 eclipse 新建空的普通 web 项目,然后打 war 包,将前端打包后的 dist 文件夹内容拖进 war 包即可

10、打包后两个 war 包正常部署到东方通,如果出现 put、delete 不能请求,修改东方通参数,默认好像禁用了 put、delete,打开就行了

存在问题

  • 日志查看曲线图有问题,需要调整 sql 语句,未做
  • 工作流可能存在问题,感觉和加载 jar 包顺序有关,重启中间件 10 次有 3 次出了问题,都在工作流方面,未做适配
  • 其他暂时没发现问题,pigx 功能都能正常用