前言
最近客户因国产化需求,选择金蝶作为服务器中间件,要求系统部署到金蝶下运行,排除tomcat依赖,支持单体、微服务,国产中间件坑一般都比较多,因此在这记录一下,Spingboot、SpringCloud项目如何部署到金蝶下运行
环境准备
操作系统:Win11
jdk:1.8.0_381
金蝶:V9.0
服务部署
war包准备
1. 启动类改造
启动类需要继承SpringBootServletInitializer,并重写configure方法
@SpringBootApplication
public class TestWarApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(TestWarApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(TestWarApplication.class, args);
}
}
2. POM文件调整
服务打包方式从jar包改成war包

3. MAVEN插件调整
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- 在这里配置插件参数 -->
<failOnMissingWebXml>false</failOnMissingWebXml> <!-- 例如,如果你不使用 web.xml -->
</configuration>
</plugin>
上述步骤准备好之后运行MAVEN->packaging指令打包,项目下会自动生成war包及解压缩的war包文件夹
war包部署
与tomcat不同,金蝶是分域的概念,一个域一个端口,相当于一个域部署一个服务,域的位置在AAS-V9.0\domains\下面,默认有个mydomain,这下面是这个域的配置及包部署位置,如果一个金蝶要部署多个服务,则需要复制多个域出来,每个域部署一个服务。
1. 上传war包
war包部署有两种方式,第一种启动金蝶,通过中间件控制台->应用管理,创建,上传,但是我试着不好使,保存没反应,过会页面报500错误,坑,因此采用第二种,直接上传war包解压缩之后的文件夹

2. 改端口号
D:\金蝶\AAS-V9.0\domains\mydomain\config\apusic.conf

3. 配置准入IP
/domains/mydomain/config/vm.options,添加内容com.apusic.webtool.allowHosts=*
这一步不配置的话访问控制台可能会出现404的问题
服务启动
到domains/mydomain/bin下 执行./startapusic即可启动
....
启动成功了?不可能的😀,作为程序员怎么可能一气呵成,一点问题没有,尤其是这种非常规部署架构,再加上国产中间件,你懂的。下面是问题总结
问题一
报错如下,大致意思是我们用到了,Hibernate-Validator包的注解,但是这个包启动加载的时候有方法没找到,根据下面提示,javax.validation.BootstrapConfiguration这个类在三个包下面存在,但是他加载的javaee.jar下的这个类,javaee.jar这个包是金蝶自己引入的,老版本用这个jar,新版本早已拆分程validator-api.jar和hibernate-validator.jar这两个jar了
解决方式:把最新的jar包往AAS-V9.0\sp这个目录下放一份,重新启动,详情见附件

问题二
报错如下,项目中用了activiti组件,启动报缺少类的问题,服务正常启动没问题,但是放到金蝶里面就有问题,怀疑是金蝶用的springboot版本和activiti版本冲突

解决方式,引入依赖
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-jpa</artifactId>
<version>${activiti.version}</version>
</dependency>
问题三
服务启动后报一堆线程栈并提示有内存泄露的风险,服务自动停了然后重启
解决方式如下:
修改JVM内存,金蝶控制台->系统参数,调大JVM参数,金蝶默认的JVM参数很低,有可能带不动部署的服务,导致内存泄漏风险提示
清除部署目录下多余的安装包,服务部署目录下默认存在default文件夹,删掉,只保留服务自身文件夹 
问题四
服务启动成功,接口请求404。原因是服务启动金蝶默认增加了"/服务名"的应用上下文,如需要改成自己需要的上下文。
解决方式:金蝶控制台->应用管理,选择应用->参数配置,修改应用上下文
问题五
Linux下部署之后磁盘持续占用过高,把服务器打满,经过排查在服务启动目录下有个nohup.out显示已经删除,但是实际还在磁盘上,占用空间在不断上升,服务部署了一天已经占用了40多G,部署过程中发现在项目比较大的时候,启动失败有时候项目文件夹自动就被清除了,有可能跟这个有关系,坑,排查指令如下:
sudo lsof +L1 | grep '/home' | grep deleted
扩展
金蝶也有类似springboot中内置的tomcat那种内置的jar包,可以通过引入jar包依赖的方式使用金蝶中间件,这样和平时jar包部署一样,不用部署war包,也没有上述那么多问题
Springboot项目war包部署金蝶教程
1531

被折叠的 条评论
为什么被折叠?



