“取一杯天上的水,照着明月人世间晃呀晃” 手机电话来了,一看原来是老板的电话,找我准没好事。
"小飞,刚xxx项目的客户打电话过来了,说手机号不能注册,赶紧看看什么问题!" 老板说。
"好的,老板。" 我温柔的回复了老板。 挂了电话后,我赶紧拿出了我的电脑。
"不应该,注册接口怎么会有问题呢?手机号+短信验证码+密码就完成注册了,很easy呀。" 边打开电脑我边在想。
电脑开机成功,打开 MobaXterm 连上服务器 ,轻车熟路敲下查看日志的命令
less log.out
ps: 简单介绍一下 less 常用命令
G 移动到最后一行
g 移动到第一行
?excep 向上搜索 包含 "excep" 的内容,回车(enter),n 向上翻页,N 向下翻页
/excep 向下搜索 包含 "excep" 的内容,回车(enter),n 向下翻页,N 向上翻页
输入G,翻到最后一行,查找异常
?exception
回车,n 向上查找,找到了,讨厌的 NullPointerException
java.lang.NullPointerException: null
// 这里可以看到错误异常具体是在哪个类,哪行代码抛出的异常
at com.hn.project.contorller.UserController.register(UserController.java:306)
打开 IDEA 开发工具,双击 shift, 搜索找到 UserController这个类。
Ctrl+G ,输入 306 ,点击 ok ,跳转到第 306 行代码。
"我擦,原来是这个地方报了空指针异常!" 我大声地说。
注册接口一共在两个地方使用了,就是下面两个:
- h5 页面邀请注册,需要携带邀请码才能注册。
- app 注册,不需要携带邀请码
因为邀请码不是必填的,所以我这边就不需要做判空的条件。但是如果有邀请码,是需要绑定邀请关系的。因为没有传邀请码,所以查询不到邀请的用户信息,就报了空指针异常。
"ok,打包部署服务器。" 我说。
打包上传,去泡杯奶茶喝,jar包上传的应该就差不多了。
奶茶泡好了,回来一看,"我擦,怎么才上传这么点?" 看到上传速度才 10k/s ,猛地一拍大腿,流量昨天开始就被限速了。租的地方没有无线网,天天在家都是用流量,这不快到月底了吗?超过10G,就限速了,赶紧向我老婆求救,她给我来了一句,她的早就被限速了。这可咋办呢?看着慢的跟蜗牛似的网速,于是有了下面的神一般操作。
线上打包
Maven 环境
- maven 安装到服务器上,如果项目上线了,最好找一台测试服务器,不要使用上线的项目的服务器,因为打包会占用服务器资源。
- 下载 maven 安装包
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
- 解压 maven
tar -xvf apache-maven-3.6.3-bin.tar.gz
- 重命名
mv apache-maven-3.6.3 mvn
- 移动到 /usr/local 目录
mv mvn/ /usr/local/
- 配置环境变量
vim /etc/profile
加入以下内容
#set maven
MAVEN_HOME=/usr/local/mvn
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin
- 让
/etc/profile文件修改后立即生效
source /etc/profile
- 验证是否安装好
mvn -v
- 源代码上传到服务器
- 压缩源代码
- 打开
MobaXterm,上传源代码
- 解压源代码
unzip -d mvnDemo mvnDemo.zip
没有unzip命令的,执行
yum install -y unzip zip安装
- 执行
mvn package进行打包
- 打开
mvnDemo目录 ,执行命令打包
mvn package -Dmaven.test.skip=true
-Dmaven.test.skip=true 打包跳过 test
- 打开
target目录,我们可以看到生成的 jar 包
- 启动jar包
- 后台启动 jar 包
nohup java -jar demo-0.0.1-SNAPSHOT.jar > log.out 2>&1 &
- 查看动态日志
tail -f log.out
- 测试接口是否正常访问
curl http://localhost:8080/test
Gradle 环境
- 下载 gradle 安装包
wget https://downloads.gradle.org/distributions/gradle-6.8.3-all.zip
- 解压安装
unzip gradle-6.8.3-all.zip
mv gradle-6.8.3 /usr/local/
cd /usr/local
mv gradle-6.8.3 gradle
mkdir -p =/usr/local/gradle/.gradle
- 环境变量配置
vim /etc/profile
加入以下内容
export GRADLE_HOME=/usr/local/gradle
export PATH=${GRADLE_HOME}/bin:${PATH}
export GRADLE_USER_HOME=/usr/local/gradle/.gradle
- 重载环境配置
source /etc/profile
- 检验是否安装成功
gradle -version
上传代码和mvn一致,主要是打包命令不一样
- gradle 打包
gradle bootJar
- jar 包生成目录,build/libs/
cd build/libs
- 后台启动
nohup java -jar demo-0.0.1-SNAPSHOT.jar > log.out 2>&1 &
二次优化
大家想一下,我们的编译后的代码实际上没有多大,占用空间的主要是依赖的 jar 包,我们一开始就把依赖的 jar 包上传到 服务器一个指定的目录,我们启动服务指定这个lib目录不就可以了吗?我们来试试看
-
创建一个 lib 文件夹
-
用压缩软件打开 jar 包,将 BOOT-INF/lib 目录下的所有 jar 包复制到刚创建好的 lib 目录
-
删除 BOOT-INF/lib 目录下所有 jar 包
java -Djava.ext.dirs=./lib -jar test.jar
注意: 如果有新的依赖 jar 包,需要单独将新的 jar 包拖到 lib 目录。
感觉这样有点麻烦,每次打完包还要手动删除依赖的 jar 包,那能不能打包的时候就排除 jar 呢?
-
gradle配置// 在 build.gradle 加入以下代码 bootJar { archiveClassifier = 'boot' excludes = ["*.jar"] }