提交 4b29d9fc 作者: han

修改定时任务

上级 d6497603
流水线 #8258 已通过 于阶段
in 2 分 21 秒
package com.mmc.iuav.user.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* Redis的配置类
* 修改redis序列化对象时 key-value的序列化方式
*
* @author han
* @date 2023/08/09
*/
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// 关联redis工厂
redisTemplate.setConnectionFactory(factory);
// 设置key的序列化方式
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setValueSerializer(RedisSerializer.json());
redisTemplate.setHashKeySerializer(stringRedisSerializer);
redisTemplate.setHashValueSerializer(stringRedisSerializer);
return redisTemplate;
}
}
......@@ -16,6 +16,7 @@ import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.Instant;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
......@@ -40,7 +41,7 @@ public class ScheduledTaskUtil {
task.setUserDO(userDO);
// task.setWxService(wxService);
redisTemplate.setValueSerializer(RedisSerializer.json());
redisTemplate.opsForValue().set("task" + userDO.getUserAccountId(), new Gson().toJson(task), delay, TimeUnit.MILLISECONDS);
redisTemplate.opsForValue().set("task" + userDO.getUserAccountId() + Instant.now(), new Gson().toJson(task), delay, TimeUnit.MILLISECONDS);
// 使用TaskScheduler执行定时任务
System.out.println("定时任务已开启");
......@@ -50,17 +51,26 @@ public class ScheduledTaskUtil {
public void destroy(Integer userAccountId){
redisTemplate.setValueSerializer(RedisSerializer.json());
String s = redisTemplate.opsForValue().get("task" + userAccountId);
if(s == null || s == ""){
Set<String> keys = redisTemplate.keys("task" + userAccountId + "*");
if(keys.isEmpty()){
return;
}
MyTask task = new Gson().fromJson(s, MyTask.class);
ScheduledFuture<?> scheduledFuture = scheduledTasks.get(userAccountId);
if (task != null && scheduledFuture != null) {
scheduledFuture.cancel(false);
redisTemplate.delete("task"+userAccountId);
scheduledTasks.remove(userAccountId);
System.out.println("定时任务已取消");
for (String key : keys) {
String s = redisTemplate.opsForValue().get(key);
MyTask task = new Gson().fromJson(s, MyTask.class);
ScheduledFuture<?> scheduledFuture = scheduledTasks.get(userAccountId);
if (task != null && scheduledFuture != null) {
scheduledFuture.cancel(false);
redisTemplate.delete("task"+userAccountId);
scheduledTasks.remove(userAccountId);
}
}
System.out.println("定时任务已取消");
// String s = redisTemplate.opsForValue().get("task" + userAccountId);
// if(s == null || s == ""){
// return;
// }
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论