微服务国产化改造-金蝶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"}}]
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笑谈子云亭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值