SpingBoot 使用@Scheduled实现一个定时清理任务

实现定时任务的方法有很多种,@Scheduled注解,scheduleAtFixedRate,timer,quartz等等。

我选择了@Scheduled,相对而言,可以让任务定点执行,并且比较简单。

首先在主类添加注解 @EnableScheduling ,使Scheduled可用。

之后新建一个定时清理类,并实现该类的定时清理方法,在定时清理方法前加上@Scheduled的注解以及corn表达式,corn表达式规定了定时任务的启动时间。以我下文为例,@Scheduled(cron = "0 0 0 * * ?")表示定时任务在每天0点启动,你可以通过 http://cron.qqe2.com/来获取你想要的cron表达式。

以上(加粗&下划线),就是利用@Scheduled实现定时清理任务的方法,很简单吧。如下是我实现的例子,有兴趣可以看一下。

 

我实现了一个 对于每个No. 如果它在数据库中记录超过50条,那么就进行清理的 定时任务。

首先从表中获取了No.们以及他们出现的次数,由于是使用mybatis进行获取,所以返回了一个map list,对他处理了一下,获得每个No.以及他们出现的次数count,判断若大于50,则清理50以外的部分。

 

package com.test.service;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.test.dao.ChangeLogDao;

/**
 * 定时清理t_result_log日志
 * 
 */

@Component
public class TimeCleaning
{
    @Autowired
    private ChangeLogDao ChangeLogDao;
    
    private static final int MAXCOUNT = 50;
    
    // 每隔一分钟触发
    // @Scheduled(cron = "0 0/1 * * * ?")
    // 每5秒触发
    // @Scheduled(cron = "*/5 * * * * ?")
    // 每天零点触发
    @Scheduled(cron = "0 0 0 * * ?")  
    public void timeCleaning()
    {
        // 获取caseNo-count map
        List<Map<String, Object>> NoCountList = ChangeLogDao.getNoCount();
        String No = null;
        int Count = 0;
        for(Map<String, Object> mapListItem:NoCountList)
        {
            for(Map.Entry<String, Object> entry:mapListItem.entrySet())
            {
                if ("COUNT1".equals(entry.getKey()))
                {
                    Count = Integer.parseInt(String.valueOf(entry.getValue()));
                }
                else if ("caseNo".equals(entry.getKey()))
                {
                    No = String.valueOf(entry.getValue());
                }
            }
            if (Count > MAXCOUNT)
            {
                ChangeLogDao.delResultChangeLog(No, Count - MAXCOUNT);
            }
        }
    }
}

 

    /**
     * 获取用No以及他们在result_changelog中次数
     * 
     * @return
     */
    public List<Map<String, Object>> getNoCount();
    
    /**
     * 定期删除结果变更记录
     * 
     * @auth veast 2018年8月24日
     * @param No
     * @param deleteCount
     */
    public void delResultChangeLog(@Param(value = "No") String No,
        @Param(value = "deleteCount") int deleteCount);

 

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个使用 `@Scheduled` 注解实现定时任务的 Spring Boot 示例代码: 首先,在 Spring Boot 项目的 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> ``` 然后,在一个 Spring Boot 的 Java 类中添加以下代码: ```java import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public class ScheduledTasks { @Scheduled(fixedRate = 5000) // 每隔 5 秒执行一次 public void task1() { System.out.println("Task1: " + System.currentTimeMillis()); } @Scheduled(cron = "0 0/1 * * * ?") // 每分钟执行一次 public void task2() { System.out.println("Task2: " + System.currentTimeMillis()); } } ``` 上面代码中,我们使用 `@Scheduled` 注解来实现两个定时任务一个是每隔 5 秒执行一次,另一个是每分钟执行一次。 其中,`@Scheduled` 注解有两个常用的属性: - `fixedRate`:表示任务执行的间隔时间,单位为毫秒。 - `cron`:表示基于 Cron 表达式的定时任务配置,格式为 `second minute hour dayOfMonth month dayOfWeek year`。 最后,启动 Spring Boot 应用程序,即可看到定时任务在后台自动执行的输出结果。 注意:在 Spring Boot 应用程序中使用 `@Scheduled` 注解时,需要在应用程序主类上添加 `@EnableScheduling` 注解,以启用定时任务功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值