spring boot 定时任务如何持续进行

huifer
  • 473
public void createWork(String name, RedisConnectionConfig config) {
    ScheduledFuture<?> schedule =
        threadPoolTaskScheduler.scheduleWithFixedDelay(
            () -> {
              synchronized (this) {
                RedisCliInfoMemory memory = redisServerInfo.memory(config);
                DateTimeFormatter dateTimeFormatter =
                    DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
                RedisMemoryTaskData redisMemoryTaskData =
                    new RedisMemoryTaskData(
                        Long.parseLong(memory.getUsedMemory()),
                        Long.parseLong(memory.getUsedMemoryRss()),
                        Long.parseLong(memory.getUsedMemoryPeak()),
                        Long.parseLong(memory.getUsedMemoryLua()));

                RedisMemoryCache redisMemoryCache = memoryCacheMap.get(name);
                log.debug("开始设置redis内存监控缓存,name=[{}],value=[{}]", name, redisMemoryTaskData);
                if (redisMemoryCache == null) {
                  redisMemoryCache = new RedisMemoryCache(3);
                  redisMemoryCache.put(
                      dateTimeFormatter.format(LocalDateTime.now()), redisMemoryTaskData);
                } else {
                  redisMemoryCache.put(
                      dateTimeFormatter.format(LocalDateTime.now()), redisMemoryTaskData);
                }
                log.info("开始设置redis组级别的缓存,name=[{}]", name);
                memoryCacheMap.put(name, redisMemoryCache);
              }
            },
            //            triggerContext -> new
            // CronTrigger(redisMemoryCron).nextExecutionTime(triggerContext)
            2000);

    futureMap.put(name, schedule);
  }
  • 这个定时任务在执行了几次以后自己就停止了我应该如何处理. 希望可以一直执行.
回复
阅读 1.7k
3 个回答
Clarence
  • 157
✓ 已被采纳

追了一下,卡在获取redis连接了。

org.tview.visualization.redis.impl.IRedisServiceInfoImpl.memory() 中调用连接池的getConnection方法后没有释放连接,前几次还ok,连接池满了之后就获取不到了。

把连接对象调用close方法就行了。

关键是得task要try catch异常,否则一但出现异常,定时任务就会中止。

定时任务,不都是用注解的吗?@Scheduled

宣传栏