timer 与 quartz 总结

本文深入探讨了Java中的定时任务机制,包括Timer与TimerTask的基本使用方法及其与Quartz的区别。详细解析了schedule与scheduleAtFixedRate两种调度方式的特点,并介绍了Spring结合Quartz实现定时任务的具体配置过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

timer

timer 用于执行timerTask类  timerTask 实现了runnable 接口 其实timer 就是启动timerTask线程 执行任务

1.schedule 4种重载

(1)在指定特定时间执行任务

(2)指定延迟时间后执行任务

(3)指定延迟时间后执行任务,并且指定时间重复执行任务

(4)指定特定时间执行任务,并且指定时间重复执行任务

2.cancel 取消所有任务   timerTask 中的 cancel 只取消自己 一个任务

3.schedule 与scheduleAtFixedRate 区别

(1)启动任务的 时间已经大于 指定的时间  比如指定 12:00:00 执行任务   实际开始于12:00:06

若每2秒执行一次, scheduleAtFixedRate 则会吧 前面 未执行的 任务次数补上 并且迅速执行完,所以需要考虑并发,schedule 则不会。

(2)执行任务时间大于时间 间隔   若指定每2秒 执行一次, 实际执行任务时间为5秒,比如指定 12:00:00 执行任务

schedule 第二次执行任务则会在 12:00:06 开始执行

scheduleAtFixedRate 依然在 12:00:02执行 所以需要考虑并发

quartz

4大主要元素

1.job接口  execute方法 用于执行需要的任务

2.JobDetail接口  用于配置任务的一些参数 及任务

3.trigger调度器    用于配置任务的执行方式执行时间

4.scheduler调度器   用于执行任务


关于cron的通配符解释如下




最后spring+quartz  下面是spring 使用quartz 的类 可在xml 或者直接在 类中进行配置

1.MethodInvokingJobDetailFactoryBean 和 JobDetailFactoryBean 的作用 与上面的 JobDetail 

xml配置

<!-- ======================== 任务 Task配置 ======================== -->
<!--MethodInvokingJobDetailFactoryBean实现-->
<bean id="quartzJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    //执行类的实例
    <property name="targetObject" ref="quartzJobTest"/>
    //执行方法
    <property name="targetMethod" value="execute"/>
    //是否支持并发
    <property name="concurrent" value="false"/>
</bean>

<!-- ======================== 配置定时调度 触发器 ======================== -->
<!--CronTriggerFactoryBean实现-->
<bean id="cronTrigger2" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail" ref="quartzJob"/>
    //上面任务的Task配置bean
    <property name="cronExpression" value="0 */1 * * * ?"/>
    //触发时机表达式 cron表达式在文章的最末尾会说
</bean>
<!-- ======================== 调度工厂(中心调度器) ======================== -->
<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"
      autowire="no">
    <property name="triggers">
        <list>
            <ref bean="cronTrigger2"/>
            //上面配置的触发器 可以配置多个任务
        </list>
    </property>
</bean>

@Component
public class quartzJobTest {

    public void execute(){
        //执行任务的代码
    }
}

spring boot 中一般配置 schdulerFactory   和 scheduler  然后 利用监听器调用

@Bean(name="SchedulerFactory")
public SchedulerFactoryBean schedulerFactoryBean() throws IOException {
    SchedulerFactoryBean factory = new SchedulerFactoryBean();
    factory.setQuartzProperties(quartzProperties());
    return factory;
}
/*
 * 通过SchedulerFactoryBean获取Scheduler的实例
 */
@Bean(name="Scheduler")
public Scheduler scheduler() throws IOException {
    return schedulerFactoryBean().getScheduler();
}
@WebListener
public class MyListener implements ServletContextListener {


    @Autowired
    private Scheduler scheduler;
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {

        try {
            scheduler.scheduleJob(JobBuilder.newJob().build(), TriggerBuilder.newTrigger().build());
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {

    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值