一般把 java 项目部署到服务器上,无非就是通过:jenkins、docker,这里给大家说一种我常用的 shell 脚本。
一、创建定时任务
使用 spring 的 @scheduled 注解创建了一个定时任务
@scheduled(cron = "0 0 8-22/2 * * mon-fri")
public void processscheduledkiddata()
{
processallkiddata();
}
cron 表达式解析:
- 分钟:0(每小时的第 0 分钟)
- 小时:8 - 22(上午 8 点到晚上 10 点),每 2 小时执行一次
- 日期:每月任意天
- 月份:每月
- 星期:周一到周五
因此,这个任务会在周一至周五的上午 8 点、10 点、中午 12 点、下午 2 点、4 点、6 点、晚上 8 点、10 点各执行一次。
或者可以使用 fixedrate(适合任务执行时间短的场景)
@scheduled(fixedrate = 1800000l) // 1800000毫秒 = 30分钟
public void test() {
func();
}
除此之外,用 fixeddelay 也可以
@scheduled(fixeddelay = 1000*60*10l) //每10分钟执行一次
public void processscheduledkiddata()
{
processallkiddata();
}
来看看它们的区别:
| 类型 | 触发机制 | 并行性 | 任务超时处理 | 适用场景 |
|---|---|---|---|---|
| fixeddelay | 任务结束后等待指定时间 | 否 | 延迟启动下一次任务 | 任务执行时间不稳定,需稳定间隔 |
| fixedrate | 固定频率触发(不管任务状态) | 可能 | 直接启动新任务 | 短任务,需严格频率控制 |
| cron | 基于表达式精确触发 | 否 | 跳过错过的时间点 | 复杂时间模式(如工作日、整点执行) |
二、打包项目
在打包项目之前,记得把 test 目录里面的测试类方法的代码给注释掉,不然会打包很久。

然后在 idea 右侧窗口的 maven 图标中,依次执行 clean 和 package 命令

在项目中的 targe 目录下可以看到最终打包项目生成的 jar 包。

三、拷贝到服务器
在 window 下打开终端,然后用下面的命令把 jar 包拷贝到你服务器创建的目录下:
scp d:\01java本地代码\engstudy-0.0.1-snapshot.jar admin@serverip:/home/admin/enstudyai

四、服务器配置
1. 检查版本
在终端中运行以下命令来查看当前安装的 java 版本
java -version

2. 安装 java 17
我 idea 和 服务器配置的都是 java 17。
如果你使用的是 ubuntu 或 debian 系统,可以使用以下命令安装 openjdk 17:
sudo apt update sudo apt install openjdk-17-jdk
如果你使用的是 centos 或 rhel 系统,可以使用以下命令安装 openjdk 17:
sudo yum install java-17-openjdk-devel
3. 配置 java 环境变量
安装完成后,需要配置 java_home 环境变量。打开 ~/.bashrc或 ~/.bash_profile 文件,并添加以下内容:
export java_home=/usr/lib/jvm/java-17-openjdk export path=$java_home/bin:$path
保存文件后,运行以下命令使配置生效:
source ~/.bashrc
此时可以在已安装的多个 java 版本中切换 java 17 版本(一般默认就好)
sudo update-alternatives --config java

五、编写脚本
1. 启动脚本
start.sh
#!/bin/bash nohup java -jar engstudy-0.0.1-snapshot.jar --server.port=15924 >/dev/null 2>&1 & echo $!>pid
这段 bash 脚本的主要作用是启动一个基于 java 的应用程序(这里是 engstudy-0.0.1-snapshot.jar),并将其放到后台运行,同时把该进程的 pid(进程标识符)保存到当前目录下名为 pid 的文件中。
2. 停止脚本
stop.sh
#!/bin/bash
appname=engstudy-0.0.1-snapshot.jar
kill -9 `pgrep -f ${appname}`
time=`date +%y%m%d%h%m%s`
mkdir backup
cp ${appname} backup/${appname}_$time.jar
find backup -mtime +3 -delete
这段 bash 脚本主要用于停止正在运行的 engstudy-0.0.1-snapshot.jar 应用程序,然后创建一个备份目录,将当前的应用程序 jar 文件备份到该目录下,并给备份文件添加时间戳后缀,最后会自动删除备份目录中超过 3 天的旧备份文件。
3. 运行脚本
直接运行 start.sh 即可
sh start.sh
4. 查看日志
回到 idea 中,看一下咱们设置的日志文件的位置,我这里是 /tmp/spring.log

然后使用下面的命令,直接显示 /tmp/spring.log 文件的最后 300 行内容,并且实时跟踪文件的更新。
tail -n 300 -f /tmp/spring.log
这里的 -n 选项明确指定了要显示的行数为 300,-f 选项则用于实时跟踪文件的更新。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论