一些常见定时器的用法

一.Quartz

/**
 * 点赞的定时任务
 */
@Slf4j
public class LikeTask extends QuartzJobBean {
    @Autowired
    ILikeService likeService;
    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    @Override
    protected void executeInternal(JobExecutionContext jobExecutionContext) {
        log.info("LikeTask-------- {}", sdf.format(new Date()));
        /* 将Redis里的点赞信息同步到数据库里 */
        HashMap<String, Object> redisLikeData = RedisUtil.getLikeKeys();
        likeService.saveData2Mysql(redisLikeData);
    }
}
/**
 * 定时器的配置文件
 */
@Configuration
public class QuartzConfig {

    private static final String LIKE_TASK_IDENTITY = "LikeTaskQuartz";

    @Bean
    public JobDetail quartzDetail() {
        return JobBuilder.newJob(LikeTask.class).withIdentity(LIKE_TASK_IDENTITY).storeDurably().build();
    }

    @Bean
    public Trigger quartzTrigger() {
        SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(10)  //设置时间周期单位秒
                .repeatForever();
        return TriggerBuilder.newTrigger().forJob(quartzDetail())
                .withIdentity(LIKE_TASK_IDENTITY)
                .withSchedule(scheduleBuilder)
                .build();
    }
}

二.ScheduledExecutorService

@Component("MyApplicationRunner_1")
public class MyApplicationRunner implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) {
        ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(10);
        scheduledThreadPool.scheduleAtFixedRate(new ThreadPoolTimer(),
                2, 2, TimeUnit.SECONDS);
    }
}
public class ThreadPoolTimer implements Runnable {
    @Override
    public void run() {
        System.out.println("线程池1中的方法被执行了");
    }
}

三.TimerTask

@Component("MyApplicationRunner_2")
public class MyApplicationRunner implements ApplicationRunner {
    private Timer timer;
    private TimerTask timerTask;

    @Override
    public void run(ApplicationArguments args) {
        timer = new Timer();
        timerTask = new TimerTask() {
            @Override
            public void run() {
                System.out.println("使用TimerTask做定时器成功执行");
            }
        };
        timer.schedule(timerTask, 2000, 2000);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值