提交 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; ...@@ -16,6 +16,7 @@ import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.Instant; import java.time.Instant;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
...@@ -40,7 +41,7 @@ public class ScheduledTaskUtil { ...@@ -40,7 +41,7 @@ public class ScheduledTaskUtil {
task.setUserDO(userDO); task.setUserDO(userDO);
// task.setWxService(wxService); // task.setWxService(wxService);
redisTemplate.setValueSerializer(RedisSerializer.json()); 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执行定时任务 // 使用TaskScheduler执行定时任务
System.out.println("定时任务已开启"); System.out.println("定时任务已开启");
...@@ -50,17 +51,26 @@ public class ScheduledTaskUtil { ...@@ -50,17 +51,26 @@ public class ScheduledTaskUtil {
public void destroy(Integer userAccountId){ public void destroy(Integer userAccountId){
redisTemplate.setValueSerializer(RedisSerializer.json()); redisTemplate.setValueSerializer(RedisSerializer.json());
String s = redisTemplate.opsForValue().get("task" + userAccountId); Set<String> keys = redisTemplate.keys("task" + userAccountId + "*");
if(s == null || s == ""){ if(keys.isEmpty()){
return; return;
} }
MyTask task = new Gson().fromJson(s, MyTask.class); for (String key : keys) {
ScheduledFuture<?> scheduledFuture = scheduledTasks.get(userAccountId); String s = redisTemplate.opsForValue().get(key);
if (task != null && scheduledFuture != null) { MyTask task = new Gson().fromJson(s, MyTask.class);
scheduledFuture.cancel(false); ScheduledFuture<?> scheduledFuture = scheduledTasks.get(userAccountId);
redisTemplate.delete("task"+userAccountId); if (task != null && scheduledFuture != null) {
scheduledTasks.remove(userAccountId); scheduledFuture.cancel(false);
System.out.println("定时任务已取消"); 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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论