🌈特别说明
从一个最简单的案例上手snail-job
实操
服务端部署
初始化数据库
数据库脚本位置
doc/sql/snail_job_mysql.sql
下载源码
https://gitee.com/aizuda/snail-job.git
或
https://github.com/aizuda/snail-job.git
maven 打包镜像
shell
mvn clean package
修改配置
snail-job-server/snail-job-server-starter/src/main/resources/application.yml/src/main/resources/application.yml
yaml
spring:
datasource:
name: snail_job
url: jdbc:mysql://localhost:3306/snail_job?useSSL=false&characterEncoding=utf8&useUnicode=true
username: root
password: root
....其他配置信息....
启动
shell
java -jar snail-job-server/snail-job-server-starter/target/snail-job-server-exec.jar
如果你已经正确启动系统了,那么你可以输入以下地址就可以进入管理系统了,
- 用户名:admin 密码:admin
http://localhost:8080
空间配置
项目启动后创建属于自己的命名空间,如果不创建使用默认的也是可以的
配置空间 【test_sj】
namespace: a1NSize1D5jP83Wj0B6Hre094f7kFeHB
切换空间
此时您看到的就是【test_sj】视角下的数据信息
组配置 【test_sj_group】
Token: SJ_t3GFbbDCpmznt9M9Pp62GYJecE6S9q9H
groupName: test_sj_group
客户端配置
添加依赖
默认您已经有一个SpringBoot项目
正式发布版 点击查看最新版本号
java
<dependencies>
<dependency>
<groupId>com.aizuda</groupId>
<artifactId>snail-job-client-starter</artifactId>
<version>{Latest Version}</version>
</dependency>
// 重试模块(若不需要可以不引入)
<dependency>
<groupId>com.aizuda</groupId>
<artifactId>snail-job-client-retry-core</artifactId>
<version>{Latest Version}</version>
</dependency>
// 定时任务(若不需要可以不引入)
<dependency>
<groupId>com.aizuda</groupId>
<artifactId>snail-job-client-job-core</artifactId>
<version>{Latest Version}</version>
</dependency>
</dependencies>
添加注解@EnableSnailJob
然后我们在SpringBoot的启动项上增加注解@EnableSnailJob
java
@SpringBootApplication
// 这里还有另一种写法 @EnableSnailJob("test_sj_group")
// 注解优先级 > 配置文件优先级 建议直接配置到配置文件中
@EnableSnailJob
public class SnailJobSpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(EasyRetrySpringbootApplication.class, args);
}
}
修改配置文件
yaml
snail-job:
# 任务调度服务器信息
server:
# 服务器IP地址(或域名);集群时建议通过 nginx 做负载均衡
host: 127.0.0.1
# 服务器通讯端口(不是后台管理页面服务端口)
port: 1788
# 命名空间 【上面配置的空间的唯一标识】
namespace: a1NSize1D5jP83Wj0B6Hre094f7kFeHB
# 接入组名【上面配置的组名称】注意: 若通过注解配置了这里的配置不生效
group: test_sj_group
# 接入组 token 【上面配置的token信息】
token: SJ_t3GFbbDCpmznt9M9Pp62GYJecE6S9q9H
# 客户端绑定IP,必须服务器可以访问到;默认自动推断,在服务器无法调度客户端时需要手动配置
host: 127.0.0.1
# 客户端通讯端口,默认 1789
port: 1789
# 实时日志配置
logging:
config: classpath:logback-boot.xml
实时日志
xml
<!-- Snail appender -->
<appender name="snailLogAppender" class="com.aizuda.snailjob.client.common.appender.SnailLogbackAppender"></appender>
<!-- 控制台输出日志级别 -->
<root level="info">
.... 其他配置 ....
<appender-ref ref="snailLogAppender" />
</root>
启动客户端
在控制台中我们点击 - 在线机器即可看到当前的客户端已经注册到了我们的机器列表中了
特别说明
通过上面一顿操作 SnailJob的客户端与服务端都已经配置完成,下面我们动手写下定时任务执行器和重试任务执行器
定时任务案例演示
编写执行器
java
@Component
@JobExecutor(name = "testJob")
public class TestJob {
public ExecuteResult jobExecute(JobArgs jobArgs) {
SnailJobLog.REMOTE.info("哈哈,测试成功了");
RequestAddJobDTO jobDTO = OpenApiBuilder.newBuilder()
.broadcast()
.jobParams("")
.jobName("")
.build();
// 调用新增接口
return ExecuteResult.success();
}
}
任务配置 【testJob】
执行结果演示
重试案例演示
java
// 定义一个重试的接口
@RestController
public class RetryController {
@Autowired
private RetryService retryService;
@GetMapping("/snail-job/retry")
public void retry() {
retryService.retry("test");
}
}
// 定义一个重试的执行器
@Component
public class RetryService {
@Retryable(scene = "test_sj_retry", retryStrategy = RetryType.LOCAL_REMOTE)
public void retry(String s) {
double i = 1 / 0;
}
}
调用接口模拟重试触发场景
shell
GET http://localhost:8081/snail-job/retry