一般把 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 图标中,依次执行 cleanpackage 命令

在这里插入图片描述

在项目中的 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 选项则用于实时跟踪文件的更新。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐