信创环境适配

信创环境适配

此次适配的服务器为麒麟v10,数据库使用人大金仓,中间件为tonweb7


文章目录

  • 信创环境适配
  • 前言
  • 一、环境准备
  • 二、组件适配Kingbase
    • Nacos
    • Activiti7
    • XxlJob
  • 三、Tongweb7替换Tomcat
    • Java代码调整
    • Vue项目打包部署
    • Web容器下部署多个服务
  • 总结


前言

此次适配针对某银行做poc,根据客户提出的应用需求来验证建议的方案是否可行,为客户确定合适的服务产品、系统;完成对指定服务器环境以及中间件、数据库的兼容

针对Kingbase替换主要适配的组件有nacos、activit7、xxl-job


一、环境准备

Kylin_v10安装:
https://blog.csdn.net/qq_40220309/article/details/114135304

Kingbase安装:
Linux:https://blog.csdn.net/yang_z_1/article/details/123252832
Windows:https://blog.csdn.net/qq_25094817/article/details/122807581

Jdk1.8安装:
https://blog.csdn.net/weixin_56921038/article/details/123726655

Tongweb7安装:
https://blog.csdn.net/peacezhi/article/details/121415348

二、组件适配Kingbase

Nacos

下文中提到的source文件夹是我用来存放已经下载好的nacos、activit7源码,根据需求前往GitHub下载指定版本

  1. 打开source文件夹下nacos项目(此版本为2.0.1如有其它版本需求,下载指定版本源码)
  2. 修改nacos源码引入驱动依赖(若使用source目录下提供nacos只需进行2.3的操作)
  3. 引入驱动依赖(根目录pom.xml)
    kingbase8.6.0的jar包需自行下载,maven仓库没有
<kingbase-connector-java.version>8.6.0kingbase-connector-java.version>
<dependency>
    <groupId>com.kingbasegroupId>
    <artifactId>kingbase8artifactId>
    <version>${kingbase-connector-java.version}version>
dependency>
  1. 修改nacos-config得pom.xml文件
<dependency>
    <groupId>com.kingbasegroupId>
    <artifactId>kingbase8artifactId>
dependency>
  1. 修改nacos-console模块的application.properties
#人大金仓
db.num=1
db.jdbcDriverName=com.kingbase8.Driver
db.url.0=jdbc:kingbase8://192.168.10.130:54321/yu_all?currentSchema=nacos_config_2.0.1
db.user=system
db.password=nkqlhhc
  1. nacos-config模块添加属性
/**
 * 数据库驱动
 * 增加对人大金仓数据库的支持
 */
private String jdbcDriverName;
public String getJdbcDriverName() {
    return jdbcDriverName;
}
public void setJdbcDriverName(String jdbcDriverName) {
    this.jdbcDriverName = jdbcDriverName;
}

为HikariDataSource对象指定驱动名称,调用setDriverClassName方法。改动见下图:
信创环境适配_第1张图片

  1. 改动完成进入源代码目录,执行构建
mvn -Prelease-nacos -Dmaven.test.skip=true -Dpmd.skip=true -Dcheckstyle.skip=true  clean install -U
# 如果遇到异常使用一下命令
mvn -Prelease-nacos -Dmaven.test.skip=true -Dpmd.skip=true -Dcheckstyle.skip=true  -Drat.numUnapprovedLicenses=100  clean install -U
  1. 查看构建包
    构建成功后,进入源代码目录distribution/target/nacos-server-2.0.1 下的 nacos 文件夹 就是最终的输出物
    nacos-server-2.0.1-SNAPSHOT.tar.gz 是linux环境的压缩包
    nacos-server-2.0.1-SNAPSHOT.zip 是windows环境的压缩包
  2. 启动nacos测试

Activiti7

Activiti7默认不支持kingbase,不过想使用kingbase做数据源需修改activiti源码生成新的activiti-engin.jar包替换原路径下(org\activiti\activiti-engine\7.0.0.SR1)中activiti-engin.jar;7.0.0.SR1版本的相关jar包已调整好在source文件里,替换即可使用;

  1. 下载activiti7源码 https://github.com/Activiti/Activiti
  2. 修改org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl,新增成员变量kingbase如下图所示
    信创环境适配_第2张图片
  3. 调整getDefaultDatabaseTypeMappings()方法如下图所示:
    信创环境适配_第3张图片
  4. 修改org.activiti.engine.impl.db.DbSqlSessionFactory
    调整initBulkInsertEnabledMap(String databaseType)方法如下如所示:
    信创环境适配_第4张图片
  5. 修改org.activiti.engine.impl.db.DbSqlSessionFactory
    调整initBulkInsertEnabledMap(String databaseType)方法如下如所示:
    信创环境适配_第5张图片
  6. 修改org.activiti.engine.impl.AbstractQuery addOrder(String column, String sortOrder, NullHandlingOnOrder nullHandlingOnOrder)调整如下:
    信创环境适配_第6张图片
  7. 增加kingbase数据库脚本(略,建议mysql生成表迁移到kingbase)
  8. package生成jar包(使用jdk11)

XxlJob

对XxlJob的兼容不完善,需在后续遇到问题再进行补充

  1. 新增kingbase数据源pom.mxl文件中增加kingbase依赖
<dependency>
    <groupId>com.kingbasegroupId>
    <artifactId>kingbase8artifactId>
    <version>8.6.0version>
dependency>
  1. 调整不兼容Kingbase代码com.xxl.job.admin.controller. JobGroupControlle
    信创环境适配_第7张图片
  2. 调整不兼容Kingbase代码com.xxl.job.admin.dao.XxlJobRegistryDao
    信创环境适配_第8张图片
  3. 调整不兼容Kingbase代码XxlJobRegistryDao
    信创环境适配_第9张图片
    信创环境适配_第10张图片

三、Tongweb7替换Tomcat

Java代码调整

注意:GateWay服务底层启动用的不是tomcat是netty需特殊处理

  1. 排除Spring默认的Tomcat
<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-webartifactId>
    
    <exclusions>
        <exclusion>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-tomcatartifactId>
        exclusion>
    exclusions>
dependency>
  1. 新增build指定打war包
<build>
    <finalName>${project.artifactId}finalName>
    <plugins>
        <plugin>
            <artifactId>maven-war-pluginartifactId>
            <version>2.6version>
            <configuration>
                
                <failOnMissingWebXml>falsefailOnMissingWebXml>
            configuration>
        plugin>
    plugins>
build>
  1. 重写启动类
public class SysApplication extends SpringBootServletInitializer {
	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
		return builder.sources(SysApplication.class);
	}
	public static void main(String[] args) {
		SpringApplication.run(SysApplication.class, args);
	}
}
  1. 新增nacos配置(若无会导致tonweb上的服务无法注册到nacos)
@Configuration
public class NacosConfig implements ApplicationRunner {
	@Autowired(required = false)
	private NacosAutoServiceRegistration registration;
	@Value("${server.port}")
	Integer port;
		
	@Override
	public void run(ApplicationArguments args) throws Exception {
		if (registration != null && prot != null) {
			Integer tomcatPort = port;
			try{
				tomcatPort = new Integer(getTomcatPort());
			} catch(Exceprion e) {
				e.printStackTrace();
			}	

			registration.setPort(tomcatPort);
			registration.start();
		}
	}

	/** 获取外部tomcat端口 */
	public String getTomcatPort() throws Exception {
		MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer();
		Set<ObjectName> objectNames = beanServer.queryNames(new ObjectName("*:type=Connector,*"), Query.match(Query.attr("protocol"), Query.value("HTTP/1.1")));
		return objectNames.iterator.next().getKeyProperty("port");
	}
}

Vue项目打包部署

  1. 运行npm run build打包
  2. 进入dist文件夹,运行jar -cvf dist.war *

Web容器下部署多个服务

如果想通过在一个TongWeb下部署多个服务,有两种方案

  1. 采用多通道结合多虚拟主机实现多服务部署
  2. 增加多个域(具体操作参考部署手册)

总结

本次适配或有许多不足,待后续补充

你可能感兴趣的:(工作经历汇总,java,数据库)