实现一键部署Java服务

说一键部署有些夸张了,本文主要描述是通过linux脚本启动SpringBoot服务的一些细节
#!/bin/bash echo "---shutdown---" app_name=service-$1 dir=/A/B pid=`ps -ef | grep $app_name.jar | grep -v "grep" | awk '{print $2}'` if [ -n "$pid" ];then echo "kill -9的pid:" $pid kill -9 $pid fi echo "---upload---" cd $dir/$app_name rm -rf $dir/$app_name/$app_name.jar rz echo "---startup---" nohup java -Dactive=dev -Deureka.url=http://localhost:0001/eureka/ -jar $dir/$app_name/$app_name.jar >$dir/$app_name/nohup.out & tail -f $dir/$app_name/nohup.out

每行脚本对应的中文翻译:
1:指此脚本使用/bin/bash来解释执行。
2:输出字符串
3:声明变量为service-加上传入的第一个参数
4:声明绝对路径
5:“里面的内容表示参数输入;
管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入;
grep 是查找含有指定文本行的意思;
grep -v 是反向查找的意思,比如 grep -v grep 就是查找不含有 grep 字段的行;
awk是行处理器,awk ‘{print $2}’的意思是以空格作为分隔符,打印第二个字段;
第五行的意思就是:先查看app_name.jar包相关的信息并排除”grep”然后取第二个字段也是就是pid码

6:pid不为空则进入if,否则不进入
7:打印信息
8:杀掉进程
9:if结束符 read more

记一个BUG

在一次发包后,没有修改接口A的任何代码,但是接口A却不能正常返回数据,
INFO级别日志一切正常,后换为DEBUG级别日志,看到一些信息:
Could not find result map java.lang.String
于是全局扫描ResultMap标签,发现的确有一处代码写错了,位置就在A接口的下边,是一段正处于开发阶段的代码
错误的原因就是我在ResultMap中写了java.lang.String,改成ResultType后正常

造成错误的原因:
1.没有通过纯净分支发布服务,因为我所开发的服务一般都是由我发布的,所以一般情况下都是在我本地的分支上发布的,正在开发的时候需要发布的情况是会经常出现的;
2.不了解Mybatis的加载机制,没有很明确的了解到与A接口无关的代码也会影响到A接口的运行 read more