IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 微服务国产化改造-金蝶Apusic应用服务器 -> 正文阅读

[Java知识库]微服务国产化改造-金蝶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"}}]
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-10-01 16:41:08  更:2021-10-01 16:42:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 18:53:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码