使用O2OA二次开发搭建企业办公平台(二)平台部署篇:端口冲突和服务器端口配置

本文介绍了解决O2OA应用中端口冲突的问题,包括如何查询端口占用情况,通过任务管理器查找并结束占用端口的进程,以及修改配置文件更改服务器端口的具体步骤。

转载:https://my.oschina.net/u/3931542/blog/2209117

 

本博客为O2OA系列教程,教程目录和各章节天梯将在连载完后更新。

 

端口冲突和服务器端口配置

今天启动应用的时候发现启动到最后报了一个错,如下图所示:

报错信息:

[main] INFO org.eclipse.jetty.server.AbstractConnector - Started ServerConnector@3c20ba2b{HTTP/1.1,[http/1.1]}{0.0.0.0:20020}
[main] INFO org.eclipse.jetty.server.Server - Started @76111ms
2018-09-26 19:56:13 PRINT [main] com.x.server.console.server.application.ApplicationServerTools - application server start completed on port:20020.
[main] INFO org.eclipse.jetty.server.Server - jetty-9.4.z-SNAPSHOT; built: 2018-05-03T15:56:21.710Z; git: daa59876e6f384329b122929e70a80934569428c; jvm 1.8.0_171-b11
[main] INFO org.eclipse.jetty.server.session - DefaultSessionIdManager workerName=node0
[main] INFO org.eclipse.jetty.server.session - No SessionScavenger set, using defaults
[main] INFO org.eclipse.jetty.server.session - node0 Scavenging every 660000ms
[main] INFO org.eclipse.jetty.server.handler.ContextHandler - Started o.e.j.w.WebAppContext@6a0a48db{/,file:///D:/o2server/servers/webServer/,AVAILABLE}

java.net.BindException: Address already in use: bind
        at sun.nio.ch.Net.bind0(Native Method)
        at sun.nio.ch.Net.bind(Net.java:433)
        at sun.nio.ch.Net.bind(Net.java:425)
        at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
        at org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:340)
        at org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:308)
        at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80)
        at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:244)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at org.eclipse.jetty.server.Server.doStart(Server.java:398)
        at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
        at com.x.server.console.server.web.WebServerTools.start(WebServerTools.java:73)
        at com.x.server.console.server.Servers.startWebServer(Servers.java:73)
        at com.x.server.console.Main.startWebServer(Main.java:555)
        at com.x.server.console.Main.startAll(Main.java:600)
        at com.x.server.console.Main.main(Main.java:201)

看上去是端口被占用了,根据O2OA的启动顺序(上一篇有讲到过),我发现20020端口已经绑定完成了,应该是web端口80被占用了。

 

查询端口占用情况

虽然网上有大把的相关说明,这里还是简要的把过程说明一下,大家有可能用得着,举一反三,其他的端口占用也可以使用类似的方法处理,思路如下:

1、查询端口监听程序所在的进程号(PID)

2、在Windows任务管理器里,查看该进程号所对应的应用程序名称即可。

操作过程:

1)查询端口监听程序所在的进程号(PID)使用命令:netstat -aon|findstr "80"

2)在Windows任务栏上使用右键(或者快捷键CTRL+SHIFT+ESC)打开任务管理器,在详细栏里,根据PID将所有的应用程序排序,之后找到2744对应的应用程序,如下图所示:

关闭相应的应用程序,或者直接右键结束任务即可。您也可以根据实际情况对相应的应用程序做出处理,如果实在没有处理方式,那么还可以修改O2OA的Web服务器的端口来解决该问题。

 

修改WEB服务器端口(其他服务器可以以相同方式进行修改)

O2OA服务器端口配置文件所在位置:o2server/config/node_127.0.0.1.json, 如果目录里没有该文件,可以从sample目录里COPY一个到config目录下。如下图所示:

打开o2server/config/node_127.0.0.1.json,配置文件内容如下:

{
  "enable": true,
  "port":null,
  "sslEnable":false,
  "logLevel":"info",
  "isPrimaryCenter": true,
  "nodeAgentEnable": true,
  "application": {
    "enable": true,
    "port": null,                                       #应用服务器端口设置,默认20020
    "sslEnable": false,
    "proxyHost": "",
    "proxyPort": null,
    "forceRedeploy": true,
    "scanInterval":5,
    "includes":[],
    "excludes":[]
  },
  "web": {
    "enable": true,
    "port": null,                                      #WEB服务器端口设置,默认80 , 将此处改为其他端口即可
    "sslEnable": false,
    "proxyHost": "",
    "proxyPort": 80,
    "forceRedeploy": true
  },
  "storage": {
    "enable": true,
    "port": null,                                      #文件存储服务器端口设置,默认20040
    "sslEnable": false,
    "name" : ""
  },
  "data": {
    "enable": true,
    "tcpPort": null,                                 #数据库服务器端口设置,默认20050
    "webPort": null,
    "includes": [],
    "excludes": []
  },
  "dumpData":{
    "cron" : "0 0 21 * * ?",
    "size" : 14
  },
  "dumpStorage":{
    "cron" : "0 0 21 * * ?",
    "size" : 14
  }
}

### O2OA企业应用开发平台的开发代码及相关资源 O2OA 是一款功能强大的开源办公自动化平台,支持多种方式进行前端后端的二次开发。以下是关于 O2OA 的开发代码示例、源码下载以及相关资源的信息。 #### 前端二次开发 对于 O2OA 的前端开发,可以通过创建 O2OA Component 来实现定制化需求。开发者可以选择不同的技术栈来构建这些组件,包括原生方式、基于 Vue3 或 React 的方式[^1]。每种方式均提供了完整的 API 支持、认证体系、多语言特性后端服务调用能力,从而让开发者能够专注于具体的业务逻辑实现。 #### 后端开发与实体类设计 在后端开发方面,O2OA 提供了一个清晰的项目结构用于扩展自定义功能。`x_sampleproject_assemble_control` 工程是专门用来编写业务逻辑的地方[^4]。此外,在官方文档中还提供了一些基础的实体类作为参考,例如 `User.java`, `MeetingRoom.java`, `Reservation.java` 等[^2]。这些实体类可以帮助理解如何建模并映射到数据库表。 #### 部署流程 为了验证开发成果或者发布新版本的应用程序,需要按照特定顺序完成部署操作。具体来说,管理员应登录至管理后台,依次上传 custom jar 文件服务 war 包,并最终重启 o2server 服务器以生效更改[^3]。如果一切正常,则可以在指定 URL 地址下查看已安装的服务模块列表[^5]: ```plaintext http://<your-server>:20030/x_program_center/jest/list.html ``` #### 源码获取途径 目前,O2OA 平台本身及其配套插件均为开放源代码形式发布,因此可以直接从其官方网站或其他授权渠道克隆仓库获得最新版完整源文件集合。通常情况下,GitHub 上会维护一份同步更新的镜像库地址,便于社区成员贡献改进意见或提交补丁修复漏洞等问题。 #### 示例代码片段 下面展示了一段简单的 Java 方法声明样例,该函数可能属于某个控制器层中的部分逻辑处理单元之一: ```java @RestController @RequestMapping("/api/reservation") public class ReservationController { @Autowired private ReservationService reservationService; /** * 查询会议室预订情况 */ @GetMapping("/{id}") public ResponseEntity<?> getReservationById(@PathVariable String id){ Optional<Reservation> optional = this.reservationService.findById(id); return optional.map(ResponseEntity::ok).orElseGet(() -> ResponseEntity.notFound().build()); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值