微服务国产化改造-金蝶Apusic应用服务器

一、金蝶Apusic配置

2.1、修改启动端口

注意查看端口是否被使用

 lsof -i tcp:9999

修改/opt/AAS/domains/mydomain/config/apusic.conf

 <ATTRIBUTE NAME="Port" VALUE="9999" />
2.2、修改jvm启动参数
根据需要,修改/opt/AAS/domains/mydomain/bin/data.xml

 <aasjvm>-Xms2g -Xmx2g -XX:MaxPermSize=768m</aasjvm>
2.3、开启DELETE,PUT,TRACE,OPTIONS请求方式
修改文件/opt/AAS/domains/mydomain/config/vm.options
注释apusic.http.disabledMethods

#apusic.http.disabledMethods=DELETE,PUT,TRACE,OPTIONS
二、后端服务改造
2.1、pom.xml改造
排除springboot内嵌tomcat

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

添加servlet支持

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
</dependency>

修改打包方式

<packaging>war</packaging>


打包插件配置

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <!--如果想在没有web.xml文件的情况下构建WAR,请设置为false。-->
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
</plugin>

2.2、启动类修改
继承SpringBootServletInitializer ,重写 configure 方法。

public class OrganizationApplication extends SpringBootServletInitializer {
 
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(new Class[]{OrganizationApplication.class});
    }

    public static void main(String[] args) {
        SpringApplication.run(OrganizationApplication.class, args); 
    }
}

2.3、单域启动多项目

一个域中需要同时启动多个war包,需要修改每个war包配置application.yml

spring.jmx.default-domain=XXX

注意:
多域(每个服务单独)部署需要去掉 spring.jmx.default-domain=XXX 配置,否则会报错。


Apusic中也需要对应修改上下文**(默认二级域名为包名称,可以直接修改部署包名称)**

 


2.4、Nacos支持
添加配置NacosConfig

import com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.annotation.Configuration;

import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.management.Query;
import java.lang.management.ManagementFactory;
import java.util.Set;


@Configuration
public class NacosConfig implements ApplicationRunner {

    private static final Logger logger = LoggerFactory.getLogger(NacosConfig.class);

    @Autowired(required = false)
    private NacosAutoServiceRegistration registration;

    @Value("${server.port}")
    Integer port;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        if (registration != null && port != null) {
            Integer tomcatPort = port;
            try {
                Integer tmp= getTomcatPort();
                if(tmp!=-1) tomcatPort = tmp;
            } catch (Exception e) {
                e.printStackTrace();
            }
            registration.setPort(tomcatPort);
            registration.start();
        }
    }

    /**
     * 获取外部tomcat端口
     */
    public Integer getTomcatPort() throws Exception {
        MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer();
        Set<ObjectName> objectNames = beanServer.queryNames(new ObjectName("*:type=Connector,*"),
                Query.match(Query.attr("protocol"), Query.value("org.apache.coyote.http11.Http11AprProtocol")));
        if (objectNames==null||objectNames.size()==0){
            return -1;
        }
        String port = objectNames.iterator().next().getKeyProperty("port");
        return Integer.parseInt(port);
    }
}

修改端口,项目运行在Apusic中的端口


2.5、上传文件增加配置 (文件服务模块xfile)
@Configuration
public class MinioConfig {
    @Bean(name = "multipartResolver")
    public MultipartResolver multipartResolver(){
        CommonsMultipartResolver resolver = new CommonsMultipartResolver();
        resolver.setDefaultEncoding("UTF-8");
        resolver.setResolveLazily(true);//resolveLazily属性启用是为了推迟文件解析,以在在UploadAction中捕获文件大小异常
        resolver.setMaxInMemorySize(40960);
        resolver.setMaxUploadSize(200*1024*1024);//上传文件大小 200M
        return resolver;
    }
}

2.6、quartz-server FeignClient
由于quartz部署在二级域名下,api接口需要添加前缀 /quartz-server

com.zbzk.safe.provider.QuartzProvider
com.zbzk.edu.provider.QuartzTaskProvider

2.7、server-socketio FeignClient
由于socketio部署在二级域名下,api接口需要添加前缀 /server-socketio

com.zbzk.edu.provider.SocketIoProvider
com.zbzk.business.quartz.service.provider.SocketioProvider
com.zbzk.envpro.provider.SocketioProvider
com.zbzk.equ.provider.SocketioProvider
com.zbzk.flow.provider.SocketIoProvider
com.zbzk.safe.provider.SocketIoProvider
com.zbzk.sysadmin.organization.provider.SocketIoProvider
com.zbzk.sysadmin.service.provider.SocketioProvider

2.8、authentication-server FeignClient
由于authentication部署在二级域名下,api接口需要添加前缀 /authentication-server

com.zbzk.auth.client.provider.AuthProvider

由于 authentication-client会被gateway-web引用,所以修改之后需要重新deploy,gateway-web才能获得最新jar包


2.9、gateway-web白名单过滤代码
由于某些项目部署在二级域名下,请求API接口会上前缀,所以白名单过滤方法改为contains包含关系


2.10、内嵌Apusic服务器
1、添加pom依赖
org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat com.apusic aams-spring-boot-starter-all 2.1.7.RELEASE
2、aams-spring-boot-starter-all-2.1.7.RELEASE.jar
加入本地:

mvn install:install-file -Dfile=aams-spring-boot-starter-all-2.1.7.RELEASE.jar -DgroupId=com.apusic -DartifactId=aams-spring-boot-starter-all -Dversion=2.1.7.RELEASE -Dpackaging=jar
3、需要在项目根目录下加入license.xml


三、前端项目部署
3.1、部署
1、卸载default应用


2、在build包中添加文件夹WEB-INF


3、修改Apusic上下文为根目录

 


四、Apusic多域名部署
4.1、复制域
cp -r /opt/AAS/domains/node1  /opt/AAS/domains/新域名XXX

4.2、编辑domains.xml

 


vi /opt/AAS/domains.xml

4.3、添加启动参数文件
cp /opt/AAS/bin/samples.xml  /opt/AAS/bin/新域名XXX.xml
vi /opt/AAS/bin/新域名XXX.xml

4.4、修改域端口


vi /opt/AAS/domains/域/config/apusic.conf
4.5、修改启动上下文

 


添加 参数 

base-context="/"
4.6、启动域
cd /opt/AAS/bin
./startas 新域名XXX
4.7、访问
浏览器输入localhost:6888/admin进入AAS管控页面
输入用户名admin
输入密码 Admin1234
注意:
多域部署需要去掉 spring.jmx.default-domain=XXX 配置,否则会报错。


五、Apusic操作
5.1、启动
1、查看服务启动情况

ps -ef | grep apusic
ps -ef | grep organization  (多域)

2、如果项目已启动

kill -9 进程号

3、启动Apusic
在目录 /opt/AAS/domains/mydomain/bin中执行

./startapusic
或者:在目录 /opt/AAS/bin中执行

./startas mydomain
4、后台启动

nohup  ./startapusic  >/dev/null  &
或者:

nohup  ./startas mydomain  >/dev/null  &
5.2、所有启动停止命令
cd /opt/AAS/bin
nohup  ./startas mydomain  >/dev/null  &
nohup  ./startas organization  >/dev/null  &
nohup  ./startas syservice  >/dev/null  &
nohup  ./startas safe  >/dev/null  &
nohup  ./startas equipment  >/dev/null  &
nohup  ./startas education  >/dev/null  &
nohup  ./startas envpro  >/dev/null  &
nohup  ./startas xfile  >/dev/null  &
nohup  ./startas report  >/dev/null  &

netstat -lnp | grep 9910
netstat -lnp | grep 9930
netstat -lnp | grep 9931
netstat -lnp | grep 9932
netstat -lnp | grep 9933
netstat -lnp | grep 9934
netstat -lnp | grep 9935
netstat -lnp | grep 9936
netstat -lnp | grep 9938
kill -9 XXX

六、常见问题
6.1、项目启动redis无法加载


解决办法:
删除jar包:  /optAAS/AAS/lib/ext/jedis-2.8.0.jar

6.3、java.lang.UnsatisfiedLinkError
/usr/local/java/jdk1.8.0_91/jre/lib/amd64/libawt_xawt.so: libXtst.so错误
添加启动脚本-Djava.awt.headless=true

6.4、接口访问不了注入DispatcherServlet
@Bean
public ServletRegistrationBean dispatcherRegistration(DispatcherServlet dispatcherServlet) {
    return new ServletRegistrationBean(dispatcherServlet,"/*");
}

6.5、java.net.SocketException: 打开的文件过多 (Accept failed)
4.5.1、原因
用 CentOS 做 API 接口服务器供其他终端调用时,并发量高会报错:java.io.IOException: Too many open files。
其原因是在 Linux 下默认的Socket最大连接数为 1024(可以通过 ulimit -n 查看)。
4.5.2、解决
1.在/etc/rc.local 后增加一行

ulimit -SHn 65535
2.在/etc/profile 后增加一行

ulimit -SHn 65535
3.在/etc/security/limits.conf最后加入两行

* soft nofile 65535
* hard nofile 65535
6.6、java.lang.NoSuchMethodError:javax.persistence.Table.indexes()


解决办法:
替换 javax.persistence-2.0.5.jar 为 javax.persistence-api-2.2.jar

附一:端口


附二:路由表

 


由于存在二级域名,需要修改数据库路由表,路由规则,保留前缀

[{"name":"StripPrefix","args":{"parts":"0"}}]
————————————————
版权声明:本文为CSDN博主「笑谈子云亭」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lj15559275886/article/details/120563949