需求
最近好几个项目都要上线,近期也经常在Linux上部署过项目,现在某个项目要部署到政务云的windows系统上
一开始我想的很简单,在windows上部署项目这不是和在本地启动一样吗。我直接在我本地打个jar包,拖到政务云服务器上启动,不就好了吗!!结果后续也是出现了一些小问题的
下面是我的部署过程:
部署过程的问题和解决办法
- 修改配置:我先将我本地的配置改为政务云服务器的配置,比如政务云的数据库配置,政务云的redis密码等
- 打包:然后在本地idea maven clean -》 maven package,执行这两个操作以后,在target目录生成了一个jar包,这个大家应该都很清楚,现在的这个包就是包含政务云配置的包了。
- 迁移包:将打好的jar包复制到政务云服务器的windows系统上,可以随便找个盘建个文件夹,将jar包复制进去,后面生成的日志也在这个文件夹中
- 编写启动脚本:我们都知道 我们可以通过java -jar xxx.jar 命令,来启动jar项目,但是使用这个命令启动的项目,关掉shell窗口以后,java进程就关闭了。这样肯定是不行的。
但是使用启动脚本是可以的,如下。新建一个txt文本,将以下内容复制进去,然后将文件后缀由.txt改为.cmd
@echo off
%1 mshta vbscript:CreateObject("WScript.Shell").Run("%~s0 ::",0,FALSE)(window.close)&&exit
java -jar E:\dev\component-services\component-service-company\target\component-service-company-1.0.1-SNAPSHOT.jar > rizhi.log 2>&1 &
exit
这里面我们需要注意的是 :
- E:\dev\component-services\component-service-company\target\component-service-company-1.0.1-SNAPSHOT.jar
是jar包的路径 - rizhi.log 是记录日志的文本文件,这个会在项目启动时自动生成
- 这个还不是最终的脚本,因为我在接下来的启动还出现了另外一个问题,大家接着往下看
- 双击脚本启动项目,然后打开rizhi.log日志看系统启动情况,发现了系统并没有启动成功,出现了这个错误:java -jar XXX.jar 没有主清单属性以及找不到或无法加载主类的问题
按照以下这个博主的一步步操作,我解决了这个问题
https://blog.csdn.net/Mrzhuangr/article/details/124731024 - 再次执行脚本重新启动:又出现了以下问题:
Caused by: java.nio.charset.MalformedInputException: Input length = 1
通过详细日志以及百度搜索,我大概知道了这个是编码的问题,需要将编码都设置成utf-8
设置好了再重新启动,发现仍然是这个报错。 - 最后通过在启动脚本上添加-Dfile.encoding=utf-8即可解决问题
@echo off
%1 mshta vbscript:CreateObject("WScript.Shell").Run("%~s0 ::",0,FALSE)(window.close)&&exit
java -Dfile.encoding=utf-8 -jar E:\dev\component-services\component-service-company\target\component-service-company-1.0.1-SNAPSHOT.jar > imApiLog.log 2>&1 &
exit
联想
这个操作也可以用在本地联调中,前端需要连你的本地对接接口,但是你还有其他的接口要写,调试过程中打断点会影响前端的对接。
这个时候你可以将配置文件改为另一个端口(这样idea启动时端口不会冲突),然后打jar包-》通过脚本启动,这样就启动了一个新的服务,让前端调用这个服务。这样不影响自己本地idea的操作