jobrunr定时任务
时间: 2024-12-27 22:28:14 浏览: 18
### 实现和配置 JobRunr 定时任务
#### 配置 JobRunr 功能模块
为了使 JobRunr 能够处理定时任务,在 `application.properties` 文件中需启用必要的功能组件:
- **Job Scheduler**: 控制作业调度逻辑。
- **Background Job Server**: 执行后台任务的服务端。
- **Dashboard**: 提供可视化界面监控任务状态。
具体配置如下所示[^1]:
```properties
org.jobrunr.job-scheduler.enabled=true
org.jobrunr.background-job-server.enabled=true
org.jobrunr.dashboard.enabled=true
```
这些设置确保了系统的各个部分能够协同工作来管理和运行计划中的任务。
#### 创建并安排重复性任务
对于希望按照固定频率执行的任务,可以利用 `BackgroundJob.scheduleRecurrently()` 方法来进行定义。此方法接收三个参数:唯一标识符、CRON 表达式的字符串以及待执行的具体操作。下面是一个例子,它展示了怎样每隔五秒执行一次名为 `"xxx-task-1"` 的任务,并传递一些参数给该任务的方法调用[^2]:
```java
import org.jobrunr.jobs.annotations.Job;
import java.util.Map;
public class TaskRunner {
@Job(name = "Execute Recurrently")
public void run(Map<String, Object> params) {
String userName = (String) params.get("userName");
String phoneNum = (String) params.get("phoneNum");
int age = (int) params.get("age");
System.out.println(String.format(
"Running recurrent job with user details: %s, %s, %d",
userName,
phoneNum,
age));
}
}
// Somewhere in your application setup code...
BackgroundJob.scheduleRecurrently(
"xxx-task-1",
"*/5 * * * * *",
() -> new TaskRunner().run(Map.of(
"userName", "xxxxxx",
"phoneNum", "18555555555",
"age", 18))
);
```
这段代码片段说明了如何通过 CRON 表达式指定执行间隔,并向目标函数提供所需的输入数据。
#### 使用 Quartz 或 Spring Task 替代方案
值得注意的是,虽然上述方式适用于大多数场景下的简单周期性任务需求,但对于更复杂的调度模式或是其他特定于框架的功能,则可能需要考虑采用像 Quartz 这样的专用库或者是内置的支持 cron 和 fixedRate 属性的 Spring Task 来满足不同的业务逻辑要求[^3]。
阅读全文