美文网首页
springboot+quartz 多任务-01

springboot+quartz 多任务-01

作者: 愤怒的奶牛 | 来源:发表于2017-12-12 15:50 被阅读0次

一:spring boot 整合 quartz 可以有两种形式:javaConfig 和 xml。使用哪种 方式看项目需求。这里采用xml ,源码:https://github.com/yoxiyoxiiii/springbootQuartzDemo.git

1:pom.xml 配置:(排除springboot 的基本配置,springboot 也有 和 quartz 整合的启动依赖,可以参看 github 上 springboot 的 spring-boot-samples:

https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples

quartz 的pom:

    <dependency>
      <groupId>org.quartz-scheduler</groupId>
      <artifactId>quartz-jobs</artifactId>
      <version>2.2.3</version>
    </dependency>
  <dependency>
      <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>2.2.3</version>
    </dependency>
 <!--spring 对quartz 的支持:可以理解为 整合quartz 需要的jar-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>4.3.13.RELEASE</version>
    </dependency>

 <!--事务的支持
    quartz 会依赖
    -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>4.3.13.RELEASE</version>
    </dependency>

 <!-- lombok 插件依赖-->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.16.18</version>
    </dependency>

启动类 App.java

/**
 * Hello world!
 *  使用 xml 的方式来配置 quartz 的job
 *  @ImportResource(locations = "classpath:quartz-spring.xml") 加载 配置文件
    在resources 下创建 quartz-spring.xml
 */
@SpringBootApplication
@ImportResource(locations = "classpath:quartz-spring.xml")
public class App 
{
    public static void main( String[] args )
    {
        SpringApplication.run(App.class, args);
    }
}

定义jobFactory 使在quartz 中注入bean


/**
 * 使 容器中的bean 可以注入在 quartz 框架中。
 */

public class JobFactory extends AdaptableJobFactory {
    @Autowired
    private AutowireCapableBeanFactory capableBeanFactory;

    @Override
    protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
        Object jobInstance = super.createJobInstance(bundle);
        capableBeanFactory.autowireBean(jobInstance);
        return jobInstance;
    }
}

自定义job、job2

---job1:
@Slf4j
public class TestJob {

    public void job() {
        log.info("TestJob.job {}" ,"run ..");
    }
}
------------
job2:
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class TestJob2 {

    public void job2() {
        log.info("TestJob2 job2 {}", "run ....");
    }
}

将自定义的job 配置到 quartz 需要以下几个步骤:

1:将 自定义的 job 和配置 到 jobDetail 中,jobDetail 是quartz 中对job的基本描述。
2:配置 触发器(定时器Trigger)并将定时器和 jobDetail 关联。
3:将触发器配置到 调度器中(scheduler)。

下面开始配置:在quartz-spring.xml 中配置

1:配置job(job2 同样的配置方法)

<!--自定义job 由spring 管理-->
 <bean id="testJob" class="com.swust.quartz.TestJob"/>

<bean id ="jobDetail-testJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <!--配置 quartz 需要执行的job 对应的类-->
        <property name="targetObject" ref="testJob"/>
        <!--具体的job 方法
         也就是说 quartz 框架执行的是 自定义的 com.swust.quartz.TestJob 中的 job() 方法。
        -->
        <property name="targetMethod" value="job"/>
    </bean>

2:配置触发器

<!--配置定时器(触发器)
给每个Job都绑定一个触发器,一个job 可以有多个触发器
-->
    <bean id="cronTrigger-testJob" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <!--定时器 绑定 任务-->
        <property name="jobDetail" ref="jobDetail-testJob"/>
        <!--每5s 执行一次-->
        <property name="cronExpression">
            <value>*/5 * * * * ?</value>
        </property>
    </bean>

3:配置 scheduler 任务调度器

<!--配置调度器
     autowire="no" 关闭自动注入,防止依赖破坏
     lazy-init="false" 关闭懒加载,即应用启动开始执行任务。
    -->
    <bean id="scheduler"  lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="jobFactory" ref="jobFactory"/>
        <!--在 调度器中 配置 需要执行job 的触发器
        可以多个 ,所以可以实现多任务。
        -->
        <property name="triggers">
            <list>
                <ref bean="cronTrigger-testJob"/>
                <ref bean="cronTrigger-testJob2"/>
            </list>
        </property>
    </bean>

注意:同样的配置可以转换为java config 的形式。同样可以实现多任务。

相关文章

  • springboot+quartz 多任务-01

    一:spring boot 整合 quartz 可以有两种形式:javaConfig 和 xml。使用哪种 方式看...

  • springboot+quartz实现多任务动态修改时间,亲测有

    网上已经有太多quartz定时任务的例子了,但是大多都不全,我这里整理了一下,希望对大家有所帮助。 下面不多说,直...

  • Python 多任务 - 01 线程

    目录一、多任务的概念二、threading的基本使用三、多线程共享全局变量四、同步概念、互斥锁解决资源竞争的问题五...

  • SpringBoot+Quartz练习

    微信步数: 用户输入账号、密码登录,在个人中心页面,显示用户基本信息,可以看到当日步行排行榜。

  • SpringBoot+Quartz练习

    采用Quartz任务调度框架,模拟微信步数排行 用户输入账号、密码登录 登陆成功,在个人中心页面,显示用户基本信息...

  • 06.系统编程-1.进程

    1、多任务的引入 实现类似唱歌又跳舞的任务同时进行的,叫做:多任务 2、多任务的概念 什么叫“多任务”。简单地说,...

  • Python多任务总结

    多任务什么是多任务同时做多件事件(做个多个任务),运行多个方法多任务的原理并发:假的多任务,时间片的轮转,快速的交...

  • 进程调度

    多任务 多任务系统可以划分为两类: 非抢占式多任务 除非进程自己停止, 否则它会一直执行 抢占式多任务 由调度程序...

  • 1-进程

    多任务原理 现代操作系统(Windows、Mac OS X、Linux、UNIX等)都支持“多任务” 什么叫多任务...

  • 进程、线程

    时间片轮转 并行:真的多任务 并发:假的多任务

网友评论

      本文标题:springboot+quartz 多任务-01

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