# owl-job
**Repository Path**: rowstop/owl-job
## Basic Information
- **Project Name**: owl-job
- **Description**: 基于Redisson的延迟队列实现的轻量级分布式定时任务(Distributed Scheduled Tasks Implemented Based on Redisson's Delayed Queue)
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://rows.top/owl-job/
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2024-07-17
- **Last Updated**: 2024-08-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: redisson, 定时任务, 分布式定时任务, SpringBoot
## README
##### 📖 中文文档 | [📖 English Documentation](README_EN.md)
# 特性
1. 依赖RedissonClient: 只和redis通信,不额外增加服务端(后面考虑增加监控大屏)
2. 完全依托于客户端,支持动态添加定时任务、支持动态添加任务监听器
3. 支持一次性任务、固定频率任务、cron表达式任务(由[cron-utils](https://github.com/jmrozanec/cron-utils)做表达式解析)
# 1. 使用准备
## 1.1 添加依赖
```xml
top.rows.cloud.owl.job
owl-job-core
1.1.0
```
## 1.2 其他依赖
### Springboot 项目
```xml
top.rows.cloud.owl.job
owl-job-spring-boot-starter
1.1.0
```
# 2. 简单使用
[参考](/owl-job-core/src/test/java/top/rows/cloud/owl/job/core)
[SpringBoot参考](/owl-job-spring-boot-starter/src/test/java/top/rows/cloud/owl/job/spring)
## 初始化
```java
//全局配置
OwlJobConfig timedConfig = new OwlJobConfig()
.setNamespace("owl-job")
.setExecutorThreadPool(
new OwlJobConfig.ThreadPoolProperties()
.setThreadNamePrefix("TJ")
.setCorePoolSize(50)
.setMaxPoolSize(100)
.setQueueCapacity(2000)
);
IOwlJobExecutor executor = new OwlJobExecutor(timedConfig);
IOwlJobTemplate template = new OwlJobTemplate(timedConfig, RedissonClientGetter.get(), executor);
template.init();
```
## 添加任务监听器
```java
//任务分组
String group = "hello-owl-job";
executor.addListener(group, param->{
System.out.println("当前时间:"+LocalDateTime.now());
System.out.println("设定时间:"+param.getTime());
System.out.println("读取到的数据"+param);
})
```
## 添加定时任务
```java
//添加任务
template.add(
group,
//设置首次执行时间
OwlJob.disposable(LocalDateTime.now().plusSeconds(3))
//设置回调参数
.setParam("job of disposable")
);
//休眠三秒查看结果
Thread.sleep(3000);
//程序结束 需要终止任务处理
template.shutdown();
```
# 3. 任务监听器注册方式
## 3.1 使用任务执行器 IOwlJobExecutor 进行注册
```java
executor.addListener(
GROUP,
(param) ->System.out.println(
"\n当前时间:"+LocalDateTime.now() +
"\n设定时间:"+param.getTime() +
"\n任务参数:"+param.getParam()
)
);
```
或
```java
executor.addListener(
new IOwlJobListener