- 保证服务器时间同步
- 每个任务类一个redisKey,且唯一
- time请设置为任务时间
- isRun(Class<?> taskClazz) 过期时间单位为s
- isRun(String redisKey, long expireSecondTime) 过期时间单位为s
- isRunFastTask(String redisKey, long expireMillisecondTime) 过期时间单位为ms
- isRun(RedisTemplate<String, String> redisTemplate, String redisKey, long intervalTime) 过期单位为s
- 该工具类需要交由spring容器管理,并注入RedisTemplate
<bean class="com.af.taskhandle.TaskHelper">
<property name="redisTemplate" ref="redisTemplate"></property>
</bean>
- 在任务类中注入taskHelper
@Autowired
private TaskHelper taskHelper;
//实现方式一,需要在job方法上用Task注解标识
@Scheduled(cron="0/10 * * * * ?")
@Task(redisKey="testTask", expireTime = 5) //redisKey为set到redis的唯一key,expireTime单位为ms
public void excute() {
Boolean flag = taskHelper.isRun(TaskTest.class); //参数为任务类的字节码
if(flag) {
System.out.println((new Date() + "task run"));
}
}
//实现方式二,直接传入key和time
@Scheduled(cron="0/10 * * * * ?")
public void excute() {
Boolean flag = taskHelper.isRun("testTask", 5); //redisKey为set到redis的唯一key,expireTime单位为ms
if(flag) {
System.out.println((new Date() + "task run"));
}
}
//该方法为1s的任务提供
@Scheduled(cron="0/1 * * * * ?")
public void excute4() {
Boolean flag = taskHelper.isRunFastTask("testTask4", 1000);
if(flag) {
System.out.println((new Date() + " task4 run"));
}
}
- 该工具类提供了一个static方法,需要传入RedisTemplate
- 在任务类中注入RedisTemplate对象
@Autowired
private RedisTemplate redisTemplate;
@Scheduled(cron="0/10 * * * * ?")
public void excute() {
Boolean flag = TaskHelperBo.isRun(redisTemplate, "testTask", 10); // 第二个参数为rediskey,第三个key过期时间,单位s
if(flag) {
System.out.println((new Date() + "task run"));
}
}
设置过期时间。过期时间在程序中处理为任务时间的一半。