java轻量级后端应用服务器从零开始一步步搭建到上线运行(二) 服务器代码 打包jar上传云服务器,脚本启动
准备
前面一章分享了一个轻量级http服务器框架源码,本章会将上一章介绍的http服务器代码打包上传到云服务器启动.
一, bat脚本批处理 打包服务器代码 jar
- 在项目中新建一个tools目录,然后新建一个打包脚本pakege.java.bat,如下:
- pakege.java.bat 脚本内容如下
@echo off
cd %~dp0
echo pakege http
jar -cfen %~dp0\..\out\http.jar main.Http -C %~dp0\..\out\production\server-demo1 .
@pause
-
关于bat的写法大家可以网上找找,这里由于仅仅介绍一下上面脚本中需要提醒的内容:
%cd%代表的是当前工作目录(current working directory,variable);
%~dp0代表的是当前批处理文件所在完整目录(the batch file’s directory,fixed)。
cd %~dp0 跳转到此bat文件所在目录 -
jar 的参数:
-c 创建新的 JAR 文件包
-e 为捆绑到可执行 jar 文件的独立应用程序
指定应用程序入口点
-t 列出 JAR 文件包的内容列表
-x 展开 JAR 文件包的指定文件或者所有文件
-u 更新已存在的 JAR 文件包 (添加文件到 JAR 文件包中)
[vfm0M] 中的选项可以任选,也可以不选,它们是 jar 命令的选项参数
-v 生成详细报告并打印到标准输出
-f 指定 JAR 文件名,通常这个参数是必须的
-m 指定需要包含的 MANIFEST 清单文件
-n 创建新档案后 执行 Pack200 规范化
-0 只存储,不压缩,这样产生的 JAR 文件包会比不用该参数产生的体积大,但速度更快
-M 不产生所有项的清单(MANIFEST〕文件,此参数会忽略 -m 参数
[jar-文件] 即需要生成、查看、更新或者解开的 JAR 文件包,它是 -f 参数的附属参数
[manifest-文件] 即 MANIFEST 清单文件,它是 -m 参数的附属参数
[-C 目录] 表示转到指定目录下去执行这个 jar 命令的操作。它相当于先使用 cd 命令转该目录下再执行不带 -C 参数的 jar 命令,它只能在创建和更新 JAR 文件包的时候可用。
注:清单文件名,档案文件名 和 入口点名称的指定顺序 与 ‘m’,‘f’,‘e’ 标记的顺序相同.
上述bat 源码中 : %~dp0…\out\http.jar 是指定生成的jar 名 , main.Http 是指定程序的入口 , -C %~dp0…\out\production\server-demo1 是指跳到 %~dp0…\out\production\server-demo1 , 而最后的一个 ‘.’ 表示-C 跳转到指定目录后 在当前路径操作 -
注意: 上面的 \out 和 \out\production 是因为我这个项目中生成的class文件放在这里 才这么写的,如果你们的项目设置过比如/bin 下面的话, 上面的bat脚本 对号入座修改. 设置地方如下:
-
运行bat脚本 两种方法:
- 第一种方法 idea 中添加script 工具后(idea在线安装cmd插件:https://blog.csdn.net/a704397849/article/details/88399636),右键 run cmd script
- 第二种方法 找到文件所在位置 用系统工具打开,如下:
- 第一种方法 idea 中添加script 工具后(idea在线安装cmd插件:https://blog.csdn.net/a704397849/article/details/88399636),右键 run cmd script
-
打包成功 如下:
二,云服务器运行java程序环境搭建
-
1 云服务器选择
部署的服务器选择不推荐买实体机作为服务器,原因:前期成本高,扩展不易,维护麻烦等等。个人或中小型企业推荐云服务器,可以按需付费,有效降低综合成本,快速的业务部署与配置、弹性扩展能力等等。
云服务器购买可以选择 阿里云(我所在公司有十几台的阿里云服务器), 腾讯云, 百度云 等 -
2 选择系统centos7.5(有些软件对版本有要求,如docker需要centos7以上)
-
3 远程登录云服务器工具
我所使用的工具 Xmanager Enterprise 5
分享资源链接(忘了是不是有一个月试用期的,如果是的也可以先用着网上搜搜解决办法)
链接:https://pan.baidu.com/s/1iXkB0GW2ICZpewVvNHkZUA
提取码:ky8y- 下载安装了 Xmanager Enterprise 5 后, 打开
- 添加一个远程登录连接, 连接名 server_test
- 第一次连接需要输入账号密码
- 下载安装了 Xmanager Enterprise 5 后, 打开
-
4 jdk安装
-
yum 快速安装 openjdk 1.8 (其他安装方式或重新安装,网上很多介绍,这里不提):
yum install java-1.8.0-openjdk -y -
安装完后 java -version 查看安装的jdk版本
-
三,上传本地文件到云服务器
在家目录下 创建一个目录 server-demo 作为服务器程序的目录 , 进入 server-demo 目录
将打包好了的本地的服务器执行程序http.jar 上传到云服务器server-demo里bin目录下, 将本地所有依赖jar包上传到serber-demo 目录libs下
下面仅仅只介绍了使用xshell自带的工具xftp来上传文件(也可以下载), 后面有时间写一篇关于自动化部署的文章里面再介绍用ssh上传的脚本.
- 上面用到的工具shell 里面的xftp工具
-
设置上传工具编码
-
上传完后 云服务器上可以看看 上传的文件
四,启动服务器程序
- 1 服务器程序启动脚本 , 在server-demo目录下,创建一个启动脚本server-http 源码如下 ,
这个脚本分析参考我的另一篇博文:https://blog.csdn.net/a704397849/article/details/88369846
#!/bin/bash
CMD=$(basename $0)
OK="[ \e[32mOK\e[0m ]";
FAIL="[\e[31mfail\e[0m]";
help(){
echo -e "[\e[32m-? | -h | -help\e[0m]"
echo -e " 帮助"
echo -e "[\e[32mstart\e[0m]"
echo -e " 启动"
echo -e "[\e[32mstop\e[0m]"
echo -e " 停止"
echo -e "[\e[32mrestart\e[0m]"
echo -e " 重启"
}
kill_cmd(){
timeout=60
i=0
if [ -f .$CMD.pid ] ;then
PID=`cat .$CMD.pid`
if [[ `kill -0 $PID &>/dev/null;echo $?` = 0 ]] ;then
kill -15 $PID &>/dev/null
echo -n "stop $CMD"
while [[ `kill -0 $PID &>/dev/null;echo $?` = 0 ]] ; do
if [ $i -ge $timeout ] ;then
echo -e $FAIL
return 1
else
echo -n "."
sleep 1
i=`expr $i + 1`
fi
done
echo -e $OK
fi
rm .$CMD.pid
fi
return 0
}
start_cmd(){
java="java -server -Xms128m -Xmx128m -Xss256k -XX:MaxPermSize=128m -XX:MaxDirectMemorySize=64m"
java="$java -jar bin/http.jar"
nohup $java >>logs/nohup.$CMD 2>&1 &
echo "start $CMD"
echo $! >> .$CMD.pid
return 0
}
##################################################
case "$1" in
'start')
start_cmd
;;
'stop')
kill_cmd
;;
'restart' | '')
kill_cmd && start_cmd
;;
'-?' | '-h' | '-help' | *)
help
;;
esac
-
2 启动程序
- 给启动脚本设置权限: chmod 755 server-http
- 创建用于存放日志的目录logs (如果存在了就不用创建了)
- 确认server-demo目录下 有logs目录, 如果没有,则创建logs 目录: mkdir logs 。 在没有logs 目录时运行启动脚本结果会如下:
- 启动脚本,如下:
- 给启动脚本设置权限: chmod 755 server-http
-
3 检查启动信息
-
进入到logs目录下 ls 查看文件 , 可以看到"nohub.启动脚本名"的文件: nohub.server-http
-
打开这个文件: vi nohub.server-http ,可以看到server-http程序启动信息:
-
-
4 接口访问
浏览器访问 http://106.13.92.221:81/test/query
-
5 关于脚本命令的简单介绍
-
重启命令: ./server-http 或 ./server-http restart
-
结束命令: ./server-http stop
-
脚本中的启动重启结束源码:
-
下一章会在此项目代码基础上增加数据库框架功能模块源码,数据库选择的是mysql
才开的博客,之前工作中笔记都只是在自己的私人空间随意记录没法分享。
趁着最近不太忙,打算将自己的积累的一些知识分享出来,希望能帮助到在学习工作中遇到类似问题或有类似需求的朋友们。
最后,
如果哪里写的有问题或不清楚 请大家在评论中指出来,我有时间会来处理。
当然如果我的文章对你有所帮助,也希望你能够点赞、收藏。这是对我的最直接的肯定和支持,会给我更多的动力分享出更多高质量的文章 (〃‘▽’〃)。