信创环境适配
此次适配的服务器为麒麟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下载指定版本
- 打开source文件夹下nacos项目(此版本为2.0.1如有其它版本需求,下载指定版本源码)
- 修改nacos源码引入驱动依赖(若使用source目录下提供nacos只需进行2.3的操作)
- 引入驱动依赖(根目录pom.xml)
kingbase8.6.0的jar包需自行下载,maven仓库没有
<kingbase-connector-java.version>8.6.0</kingbase-connector-java.version>
<dependency><groupId>com.kingbase</groupId><artifactId>kingbase8</artifactId><version>${kingbase-connector-java.version}</version>
</dependency>
- 修改nacos-config得pom.xml文件
<dependency><groupId>com.kingbase</groupId><artifactId>kingbase8</artifactId>
</dependency>
- 修改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
- nacos-config模块添加属性
/*** 数据库驱动* 增加对人大金仓数据库的支持*/
private String jdbcDriverName;
public String getJdbcDriverName() {return jdbcDriverName;
}
public void setJdbcDriverName(String jdbcDriverName) {this.jdbcDriverName = jdbcDriverName;
}
为HikariDataSource对象指定驱动名称,调用setDriverClassName方法。改动见下图:
- 改动完成进入源代码目录,执行构建
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
- 查看构建包
构建成功后,进入源代码目录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环境的压缩包 - 启动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文件里,替换即可使用;
- 下载activiti7源码 https://github.com/Activiti/Activiti
- 修改org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl,新增成员变量kingbase如下图所示
- 调整getDefaultDatabaseTypeMappings()方法如下图所示:
- 修改org.activiti.engine.impl.db.DbSqlSessionFactory
调整initBulkInsertEnabledMap(String databaseType)方法如下如所示:
- 修改org.activiti.engine.impl.db.DbSqlSessionFactory
调整initBulkInsertEnabledMap(String databaseType)方法如下如所示:
- 修改org.activiti.engine.impl.AbstractQuery addOrder(String column, String sortOrder, NullHandlingOnOrder nullHandlingOnOrder)调整如下:
- 增加kingbase数据库脚本(略,建议mysql生成表迁移到kingbase)
- package生成jar包(使用jdk11)
XxlJob
对XxlJob的兼容不完善,需在后续遇到问题再进行补充
- 新增kingbase数据源pom.mxl文件中增加kingbase依赖
<dependency><groupId>com.kingbase</groupId><artifactId>kingbase8</artifactId><version>8.6.0</version>
</dependency>
- 调整不兼容Kingbase代码com.xxl.job.admin.controller. JobGroupControlle
- 调整不兼容Kingbase代码com.xxl.job.admin.dao.XxlJobRegistryDao
- 调整不兼容Kingbase代码XxlJobRegistryDao
三、Tongweb7替换Tomcat
Java代码调整
注意:GateWay服务底层启动用的不是tomcat是netty需特殊处理
- 排除Spring默认的Tomcat
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 去除内嵌tomcat --><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions>
</dependency>
- 新增build指定打war包
<build><finalName>${project.artifactId}</finalName><plugins><plugin><artifactId>maven-war-plugin</artifactId><version>2.6</version><configuration><!--如果想在没有web.xml文件的情况下构建WAR,请设置为false--><failOnMissingWebXml>false</failOnMissingWebXml></configuration></plugin></plugins>
</build>
- 重写启动类
public class SysApplication extends SpringBootServletInitializer {@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {return builder.sources(SysApplication.class);}public static void main(String[] args) {SpringApplication.run(SysApplication.class, args);}
}
- 新增nacos配置(若无会导致tonweb上的服务无法注册到nacos)
@Configuration
public class NacosConfig implements ApplicationRunner {@Autowired(required = false)private NacosAutoServiceRegistration registration;@Value("${server.port}")Integer port;@Overridepublic 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项目打包部署
- 运行npm run build打包
- 进入dist文件夹,运行jar -cvf dist.war *
Web容器下部署多个服务
如果想通过在一个TongWeb下部署多个服务,有两种方案
- 采用多通道结合多虚拟主机实现多服务部署
- 增加多个域(具体操作参考部署手册)
总结
本次适配或有许多不足,待后续补充