最近学习了 SpringBoot 来做项目,打 war 包发布时发现了两个问题:
打包 SpringBoot 项目时,用 mvn install 默认打包成了 jar ,我就有些疑惑,web 项目不是需要打包成 war包嘛?
于是用java -jar 项目名.jar的方式运行,发现没任何问题,页面可以访问,为什么这里不需要tomcat也可以运行了?然后我又打包成 war 放进 tomcat 运行,发现端口号变成 tomcat 默认的 8080(我在server.port中设置端口8090)项目名称也必须加上了。
也就是说我在原来的机器的IDEA中运行,项目接口地址为 ip:8090/login ,打包放进另一台机器的tomcat就变成了 ip:8080/项目名/login ,这又是为什么呢?
我在网上查了查资料,发现 SpringBoot 通过 jar 运行实际上是启动了内置的 tomcat ,所以用的是应用的配置文件中的端口,直接部署到 tomcat 之后,内置的 tomcat 就不会启用,所以相关配置就以安装的 tomcat 为准,与应用的配置文件就没有关系了。
所以我决定使用 jar 类型打包项目,因为 SpringBoot 默认推荐的是 html ,而不是 jsp ,所以使用 jar 包会更方便 。
在 Linux 中运行 jar 包 ,只需要一条指令:
java -jar XXXX.jar
XXXX.jar就是你的jar包,出现 Started XXXX in 10.144 seconds (JVM running for 11.731) 这样的,项目就运行成功。
但是这样启动方式在关闭客户端项目就停止了,比如我在阿里云服务器关闭了终端就无法访问了,当你的项目需要永久的运行的时候,就需要使用下面的方法:
nohup java -jar XXXX.jar > system.log 2>&1 &
nohup命令 用途:用在一个命令的最前面,表示不挂断地运行命令。 语法:nohup Command [Arg …] [&]
& 命令 用途:用在一个命令的最后面,表示这个命令在后台运行。 语法:一般和nohup一起使用,即:nohup command &。
即将 2 (Linux标准错误输出)和 1 (Linux的标准输出)都输出到同一个文件中。 例如:
语句 :nohup java -jar app.jar >log 2>&1 &
本来1----->屏幕 (1指向屏幕)
执行>log后, 1----->log (1指向log)
执行2>&1后, 2----->1 (2指向1,而1指向log,因此2也指向了log)
也不知道我有没有讲清楚,可以下放了评论留言一起探讨一下~
运行命令后,在同级目录下会出现system.log文件,这个文件就项目的日志文件。
运行命令后,在同级目录下会出现 system.log 文件,这个文件就项目的日志文件。
使用命令:ps -a可以查看Java程序运行的进程号,用于停止程序,不过当程序有好几个的时候,用命令:ps -ef|grep java
这个命令会将搜索Java相关的所以进程号,根据jar包名称找到需要停止的进程号,使用命令:kill -9 11759
杀死进程,11759是进程号。
ps -aux ps -aux | grep java kill -9 进程号
(PS:杀死进程时一定要注意不要看错了进程号,以免杀错!!)