美文网首页
Spring Scheduling -- 任务调度

Spring Scheduling -- 任务调度

作者: saoraozhe3hao | 来源:发表于2018-11-20 09:42 被阅读0次

    文档:https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/integration.html#scheduling
    Quartz官网:http://www.quartz-scheduler.org/
    cron表达式生成器:http://cron.qqe2.com/

    Spring Task 对比 Spring Quartz
    1、Spring Task默认单线程串行执行任务,多任务时若某个任务执行时间过长,后续任务会无法及时执行
    2、Quartz采用多线程,下一个调度时间到达时,会另起一个线程执行调度,不会发生阻塞问题,但调度过多时可能导致数据处理异常
    3、Spring Task抛出异常后,同一个任务后续不再触发
    4、Spring Quartz抛出异常后,同一个任务后续仍然会触发

    Spring Task应用组成

    1-0、SpringMVC配置:Spring Bean配置

    <context:component-scan base-package="com.hogen.*" />
    <context:annotation-config />
    
    <task:executor id="executor" pool-size="5" /> <!-- executor线程池 -->
    <task:scheduler id="scheduler" pool-size="5" /> <!-- scheduler线程池 -->
    <task:annotation-driven executor="executor" scheduler="scheduler" />
    

    1-1、SpringBoot配置:给主类增加注解 @EnableScheduling
    2、定义任务

    @Scheduled(cron = "0/5 * * * * ? ")   // cron 表达式 有 6域 和 7域 两种,这里只能使用6域,即7域的前6域
    public void startJob() {
        System.out.println("1");
    }
    

    Spring Quartz应用组成

    1、配置Maven依赖

    <dependency>
      <groupId>org.quartz-scheduler</groupId>
      <artifactId>quartz</artifactId>
      <version>2.3.0</version>
    </dependency>
    

    2、Spring Bean配置
    层次结构:调度器 -> 触发器 -> 任务

    <!-- 任务定义 -->
    <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="jobBean"/>  <!-- 目标bean -->
        <property name="targetMethod" value="startJob"/>  <!-- 目标方法 -->
        <property name="concurrent" value="false"/> <!-- 同一个job没执行完,不启动下一次执行 -->
    </bean>
    <!-- 简单触发器 -->
    <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
        <property name="jobDetail" ref="jobDetail"/>
        <property name="startDelay" value="1000"/>  <!-- 1秒后开始 -->  
        <property name="repeatInterval" value="5000"/>  <!-- 每5秒执行一次 --> 
    </bean>
    <!-- cron触发器 -->
    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="jobDetail"/>
        <property name="cronExpression" value="0/5 * * * * ? "/>
    </bean>
    <!-- 调度器 -->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="cronTrigger"/>
                <ref bean="simpleTrigger"/>
            </list>
        </property>
    </bean>
    

    相关文章

      网友评论

          本文标题:Spring Scheduling -- 任务调度

          本文链接:https://www.haomeiwen.com/subject/wnktqqtx.html