从打包方式,javaweb可以打包成war包和jar包两种方式。二者有一定区别,war包通常是Spring MVC项目打包,可执行的jar包通常是Spring Boot项目。
war是一个可以直接运行的web模块,通常用于网站,打成包部署到容器比如Tomcat,war不仅包含java类还可以有HTML页面、图像文件等其他资源。
普通jar包里面通常是java类,打成包便于管理、依赖。但是我们发布时候打的jar包和普通jar包不一样,这种jar包不能被其他项目所依赖,即使被依赖了也不能直接使用其中的类。一般的Spring MVC项目只能打包成war发布,而jar包是作为插件。Spring Boot项目可以打成可执行的jar包,因为Spring Boot内置了Tomcat容器。Spring Boot也可以打包成war,但是不推荐。从war和jar就可以看出来,Spring Boot比Spring MVC更好的做到了前后端分离。
一、部署war包
将war包放到Tomcat安装目录的webapps
文件夹下。启动Tomcat,程序会自动解压开war包。项目部署完毕。尝试访问,如果访问失败可以查看下端口和防火墙。
二、部署jar包
1、运行jar包
java -jar demo.jar
当前ssh窗口被锁定,按CTRL + C或关闭窗口,程序会停止运行。
nohup java -jar demo.jar &
nohup 意思是不挂断运行,当终端关闭时程序仍然运行。
当用 nohup 命令时,所有输出被重定向到nohup.out的文件中,除非另外指定了输出文件。&是指在后台运行。
停止程序需使用结束进程的方式。
nohup java -jar demo.jar > ./demo.log 2>&1 &
0表示标准输入,1表示标准输出,2表示标准错误。
>表示重定向,而2>&1中的>&是一个整体,不可分开。
> ./demo.log指定日志文件为demo.log,2>&1表示将标准错误也输出到标准输出中。
2、将jar应用设置为开机自启动服务
可以使用 systemctl 也可以使用 chkconfig 。这里推荐使用systemctl。
- chkconfig 方式
在/etc/init.d/
目录下创建shell脚本demoService.sh:
#!/bin/sh
#程序名
RUN_NAME="demo.jar"
#jar 位置
JAVA_OPTS=/root/demo.jar
LOG_OPTS=/root/demo.log
#开始
start() {
source /etc/profile; nohup java -jar $JAVA_OPTS >$LOG_OPTS 2>&1 &
echo "$RUN_NAME started success."
}
#结束
stop() {
echo "stopping $RUN_NAME ..."
kill -9 `ps -ef|grep $JAVA_OPTS|grep -v grep|grep -v stop|awk '{print $2}'`
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Userage: $0 {start|stop|restart}"
exit 1
esac
设置执行权限
chmod +x /etc/init.d/demoService.sh
chmod +x /etc/init.d/demo.jar
chkconfig命令用于检查,设置系统的各种服务。
添加到chkconfig作为系统服务,并设置开机启动:
chkconfig --add demoService.sh (添加为系统服务)
chkconfig demoService.sh on (开机自启动)
service demoService.sh start(启动服务)
- systemctl方式
- 新建启动脚本
vim start.sh
#!/bin/sh
nohup java -jar /usr/local/apps/demo-service/demo.jar > /logs/demo-service.log 2>&1 &
echo $! > /var/run/demo-service.pid
- 新建停止脚本
vim stop.sh
#!/bin/sh
PID=$(cat /var/run/shiftcalendar.pid)
PID_EXIST=$(ps aux | awk '{print $2}'| grep -w $PID)
if [ -n "$PID_EXIST" ]; then
kill -9 $PID
else
echo the process $PID is not exist
fi
- 添加启动权限
chmod +x start.sh
chmod +x stop.sh
在 /usr/lib/systemd/system/
目录下创建服务demo.service
#!/bin/sh
[Unit]
Description=demo-service
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/root/app/reboot_shell/start.sh
ExecStop=/root/app/reboot_shell/stop.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
设置为开机自启动服务
systemctl enable demo.service
systemctl start demo.service
systemctl status demo.service