Spring与Quartz整合

发布于:2024-07-03 ⋅ 阅读:(16) ⋅ 点赞:(0)

Quartz框架是一个轻量级的任务调度框架,它提供了许多内置的功能,包括:支持作业的调度、集群调度、持久化、任务持久化、任务依赖、优先级、并发控制、失败重试等。同时也支持自定义作业类型和触发器类型。与Spring整合步骤如下:

  1. 引入包
    <dependency>
    	<groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.37</version>
    </dependency>
    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>2.2.3</version>
    </dependency>
     <dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-context-support</artifactId>
    			<version>5.3.37</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-tx</artifactId>
    			<version>5.3.37</version>
    		</dependency>
    		<dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>2.0.13</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-nop</artifactId>
        <version>2.0.13</version>
        <scope>test</scope>
    </dependency>

  2. 写一个类实现Quartz的job接口
     

    /**
    *Description:
    *author: ljd
    *@date 2024年7月3日 
    *@version 1.0 
    */
    package test.spring.model;
    
    import org.quartz.Job;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    
    public class Myjob implements Job {
    
    	@Override
    	public void execute(JobExecutionContext context) throws JobExecutionException {
    		System.out.println("quartz调度执行内容.................");
    
    	}
    
    }

  3. 在Spring中配置
     

    <!--配置一个工作任务 -->
    	<bean id="myJob"
    		class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
    		<property name="name" value="myQuartzjob"></property>
    		<property name="group" value="myGroup"></property>
    		<!-- jobClass为自己写的job工作类 -->
    		<property name="jobClass" value="test.spring.model.Myjob"></property>
    		<!-- 必须设置为true,如果为false,当没有活动的触发器与之关联时,在调度器中会删除该工作任务 -->
    		<property name="durability" value="true"></property>
    		<!--applicationContextJobDataKey为Spring配置文件 -->
    		<property name="applicationContextJobDataKey"
    			value="applicationContext"></property>
    	</bean>
    	<!--配置一个处发器 -->
    	<bean id="trigger"
    		class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    		<property name="name" value="myTrigger"></property>
    		<property name="group" value="myGroup"></property>
    		<!--jobDetail为要触发的工作,设置多个值 为 jobDetaMap -->
    		<property name="jobDetail" ref="myJob"></property>
    		<!-- 设置执行时间 默认为7位数,从左到右,分别人 “秒 分 时 日 周 月 年” 年可省略,其中*表示任意数,? 表示忽略 -->
    		<!-- 如 : "0/3 * * * * ?" 表示第0秒开始,每三秒执行一次 -->
    		<property name="cronExpression" value="0/3 * * * * ?"></property>
    	</bean>
    	<!--配置调度器 -->
    	<bean id="scheduler"
    		class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    		<property name="triggers">
    			<list>
    				<ref bean="trigger" />
    			</list>
    		</property>
    	</bean>
    

  4. 写一个类测试
     

    /**
    *Description:
    *author: ljd
    *@date 2024年7月3日 
    *@version 1.0 
    */
    package testSpring;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.scheduling.quartz.SchedulerFactoryBean;
    
    public class TestScheduller {
    	public static void main(String[] args) {
    		ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
    		/* 从Spring容器中获取调度器,正常情况是Spring容初始化后,调度器就会自动启动 */
    		SchedulerFactoryBean scheduler=(SchedulerFactoryBean) ac.getBean("scheduler");
    		scheduler.start();
    	}
    
    }

    测试结果:


网站公告

今日签到

点亮在社区的每一天
去签到