信创环境适配
此次适配的服务器为麒麟v10,数据库使用人大金仓,中间件为tonweb7
文章目录
前言
此次适配针对某银行做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 {
@Override
protected 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;
@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项目打包部署
- 运行npm run build打包
- 进入dist文件夹,运行jar -cvf dist.war *
Web容器下部署多个服务
如果想通过在一个TongWeb下部署多个服务,有两种方案
- 采用多通道结合多虚拟主机实现多服务部署
- 增加多个域(具体操作参考部署手册)
总结
本次适配或有许多不足,待后续补充