timer 与 quartz 总结

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) {

    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值