打包部署
手动部署
Window下测试
SpringBoot-Maven打包
SpringBoot打包工具,Maven默认打的jar包不能直接运行
演示:没有使用SpringBoot打包工具,使用Maven原生打包
打成的jar包很小【64k】,在CMD命令行运行测试
java -jar shop_product-1.0-SNAPSHOT.jar
可以讲这个jar包复制到桌面解压,查看meta-inf,定位Created-By
可得知该jar包由Maven创建
在测试模块【此处为shop_product】pom.xml中加入SpringBoot打包工具配置
<build>
<finalName>shop_product</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
再次打包,会发现有两个jar包,shop_product.jar.original是Maven原生打的【就是之前的shop_product-1.0-SNAPSHOT.jar】,SpringBoot打包工具会对原始jar包重命名,在其基础上生成的shop_product.jar,该jar包包含完整依赖,可以独立运行【容量也增了不少,约75M】。
结果:
CMD再次运行测试,启动正常:
java -jar shop_product.jar
确认:将shop_product.jar复制了桌面解压,查看meta-inf。
说明:
JVM通过Main-Classs的JarLauncher【SpringBoot提供的jar包启动器】找到服务启动类Start-Class: com.atguigu.ProductApplication
Spring-Boot-Classes:SpringBoot源文件路径。
Linux下测试
此处用的连接工具是FinalShell
未安装虚拟机可执行:
yum install -y java-1.8.0-openjdk-devel.x86_64
java -version
看到Jdk版本信息表示安装成功
openjdk version "1.8.0_342"
OpenJDK Runtime Environment (build 1.8.0_342-b07)
OpenJDK 64-Bit Server VM (build 25.342-b07, mixed mode)
基于bash命令
将shop_product.jar上传到服务器,执行java -jar shop_product.jar
运行
**问题:**当前是前台启动,不是常驻进程,输入Ctrl+C---->服务退出
可使用nohup java -jar xxx &
,xxx代表我们需要启动的微服务
nohup java -jar shop_product.jar &
说明:
nohup
—>no hang up:不挂起,当前进程不会接收任何输入,之前输入Ctrl+C服务退出了是因为接收了标准输入,此外还会把服务运行的输入信息追加到nohup.out文件中,可以执行tail -10f nohup.out
查看最后10行信息&
:表示后台启动
第一步:获取与shop_product.jar
相关的进程信息
ps -ef | grep shop_product.jar
此时显示有两个,第一个是java进程,第二个是grep搜索进程
root 41775 24702 22 07:35 pts/3 00:01:08 java -jar shop_product.jar
root 47771 102240 0 07:40 pts/0 00:00:00 grep --color=auto shop_product.jar
说明
ps -ef,ps:查看服务器的进程信息
选项:
-e:等价于 -A,表示列出全部的进程
-f:显示全部的列
第二步:过滤grep显示的进程信息,|后面添加grep -v grep
ps -ef | grep shop_product.jar | grep -v grep
只显示java进程
root 41775 24702 10 07:35 pts/3 00:01:14 java -jar shop_product.jar
第三步:获取shop_product.jar
服务的进程号
ps -ef | grep shop_product.jar | grep -v grep | awk '{print $2}'
关闭shop_product.jar
服务:
ps -ef | grep shop_product.jar | grep -v grep | awk '{print $2}' | xargs kill -9
基于shell脚本
第一步:
每次执行很长的指令太麻烦了,可以封装成脚本,服务名动态传入
新建kill.sh
#!/bin/bash
ps -ef | grep $1 | grep -v grep | awk '{print $2}' | xargs kill -9
$1代表第一个参数,此处指定为服务名
修改脚本权限:
chmod u+x kill.sh
创建logs文件夹,存放日志信息
后台启动,将日志信息输出到logs文件夹下的test.log
nohup java -jar shop_product.jar > logs/test.log 2>&1 &
./kill.sh shop_product.jar
[root@localhost java_jar]# ./kill.sh shop_product.jar
已杀死
第二步:将启动和停止服务封装成一个shell脚本,新建jar_opt.sh
#!/bin/bash
start_service() {
nohup java -jar $1 > $2 2>&1 &
}
stop_service() {
ps -ef | grep $1 | grep -v grep | awk '{print $2}' | xargs kill -9
}
case $1 in
"start")
start_service $2 $3
;;
"stop")
stop_service $2
;;
esac
启动服务:
./jar_opt.sh start shop_product.jar logs/test.log
停止服务:
./jar_opt.sh stop shop_product.jar
自动部署待完善…