Spring中使用Quartz的配置步骤

配置:

需要在spring中加入的包

quartz-all-1.6.0.jarcommons-collections.jar

===============================华丽的分割线===========================

1、加入需要执行worker

<bean id="testTaskService" class="com.jd.lottery.service.timetask.impl.PursueCancelTaskServiceImpl"/>

Ps : 一个普通的bean

===============================华丽的分割线===========================

2、在Quartz中注入worker类和需要执行的方法

<bean id="testQuartz" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
       <property name="targetObject"ref="testTaskService"/>
       <property name="targetMethod"value="execute"/>
       <property name="concurrent"value="false"/>
</bean>

Ps:

targetObject : 目标对象,即worker

targetMethod :目标方法,需要执行的目标方法,必须是无参方法

concurrent  同步。

Q&A

Q: 执行的方法必须是无参方法,如何传递参数?

A:在Spring中注入参数

    eg :

<bean id="testTaskService"class="com.jd.lottery.service.timetask.impl.PursueCancelTaskServiceImpl">
    <property name=”arg1” value=”10” />
</bean>

Qconcurrent具体什么意思?

A:指定concurrent设为false,多个线程不会并发运行,第二个线程将不会在第一个线程完成之前开始。

===============================华丽的分割线===========================

3、配置时间触发器

<bean id="testTrigger"class="org.springframework.scheduling.quartz.CronTriggerBean">
       <property name="jobDetail"ref="testQuartz"/>
       <property name="cronExpression"value="0/5 * * * * ?"/>
</bean> 


Ps

jobDetail :要触发的Quartz

cronExpression:触发周期

Q&A

QcronExpression怎么配置?

A:每一位的含义

              秒(0-59 可用符号:, - * /) 

              分(0-59 可用符号:, - * /) 

              小时(0-23 可用符号:, - * /) 

              日(1-31 可用符号:, - * / ?) 

              月(1-12 可用符号:, - * /) 

              周(1-7 可用符号:, - * / ?) 

              年(1970-2099 可选 可用符号:, - * /)

   字符的含义 *:表示所有值

            ?: 表示不关心该位的值

            -:范围,如:在周的位置使用1-7 相当于*

            ,:表示指定的某些值,如:在周的位置使用1,3,5表示在周一,周三,周五触发

               /:表示每次递增,如:在秒的位置使用 0/5 表示在0秒触发,每个5秒触发一次

    eg :

   每隔5秒触发一次

<bean id="testTrigger"class="org.springframework.scheduling.quartz.CronTriggerBean">
       <property name="jobDetail"ref="testQuartz"/>
       <property name="cronExpression"value="0/5 * * * * ?"/>
</bean>

   每天103025秒触发一次

<bean id="testTrigger"class="org.springframework.scheduling.quartz.CronTriggerBean">
       <property name="jobDetail"ref="testQuartz"/>
       <property name="cronExpression"value="25 30 10 0/1 * ?"/>
</bean>

   每周一三五晚十点触发一次

<bean id="testTrigger"class="org.springframework.scheduling.quartz.CronTriggerBean">
       <property name="jobDetail"ref="testQuartz"/>
       <property name="cronExpression"value="0 0 22 2,4,6 * ?"/>
</bean>

=============================== 华丽的分割线 ==========================


4、配置触发任务

<bean id="testScheduler"class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
       <property name="triggers">
           <list>
              <ref bean="testTrigger"/>
           </list>
       </property>
       <property name="autoStartup"value="true"/>
       <property name="quartzProperties">
           <props>
              <prop key="org.quartz.threadPool.threadCount">1</prop>
           </props>
       </property>
</bean>


Ps

triggers:注入定时器任务,可以为多个

autoStartup:系统启动时自动启动,可以不配置,默认为true

quartzPropertiesQuartz其他配置 org.quartz.threadPool.threadCount可以不配,默认为10

Q&A

Q:当autoStartup设置为false时怎么启动?

A:如果需要手动启动Scheduler则需要获得Quartz中的stdScheduler对象,调用该对象的start方法启动,shutdown方法关闭。

   要取得stdScheduler对象要配置Map对象来保存stdScheduler对象即可

   eg

  Xml :

<bean name="schedulerMap"class="java.util.HashMap">
    <constructor-arg>
       <map>
           <entry key="testScheduler"value-ref="testScheduler"/>
       </map>
    </constructor-arg>
</bean>

  Code 

Map<String, StdScheduler> scheMap = (Map<String, StdScheduler>) context.getBean("schedulerMap");
StdScheduler std = scheMap.get("testScheduler");
System.out.println("wait 3 second to start");
Thread.sleep(3000);
std.start();
System.out.println("30 seconds shutdown after");
for (int i = 30; i >= 1; i--) {
    Thread.sleep(1000);
    System.out.println("countdown : " + i);
}
std.shutdown();
System.out.println("worker is stop..");

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 使用 Quartz 非常简单,只需要按照以下步骤: 1. 添加依赖 在 pom.xml 文件添加 Quartz 依赖: ```xml <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version> </dependency> ``` 2. 配置 QuartzSpring Boot 应用程序,可以通过 `@Bean` 注解将 Quartz 配置Spring Bean。在配置文件,可以使用 `quartz.properties` 文件或者直接使用 Java 代码进行配置。 以下是使用 Java 代码配置 Quartz 的示例: ```java @Configuration public class QuartzConfig { @Bean public JobDetail jobDetail() { return JobBuilder.newJob().ofType(MyJob.class).storeDurably().withIdentity("MyJob").withDescription("My Job").build(); } @Bean public Trigger trigger(JobDetail job) { return TriggerBuilder.newTrigger().forJob(job).withIdentity("MyTrigger").withDescription("My Trigger").withSchedule(CronScheduleBuilder.cronSchedule("0 0/5 * * * ?")).build(); } @Bean public Scheduler scheduler(Trigger trigger, JobDetail job, DataSource dataSource) throws SchedulerException { StdSchedulerFactory factory = new StdSchedulerFactory(); factory.initialize(); Scheduler scheduler = factory.getScheduler(); scheduler.setJobFactory(springBeanJobFactory()); scheduler.getContext().put("dataSource", dataSource); scheduler.scheduleJob(job, trigger); scheduler.start(); return scheduler; } @Bean public SpringBeanJobFactory springBeanJobFactory() { return new SpringBeanJobFactory(); } } ``` 在上面的示例,定义了一个 `MyJob` 类,该类实现了 `org.quartz.Job` 接口。然后使用 `JobBuilder` 创建 `JobDetail` 对象,并将 `MyJob` 类型指定为 Job 类型。接下来,使用 `TriggerBuilder` 创建 `Trigger` 对象,并将其与 `JobDetail` 绑定。最后,创建一个 `Scheduler` 对象,并将 `JobDetail` 和 `Trigger` 对象传递给它,并启动调度器。 3. 创建 Job 类 在上面的示例,我们定义了一个 `MyJob` 类,用于执行需要定时执行的任务。以下是 `MyJob` 类的示例代码: ```java public class MyJob implements Job { private static final Logger logger = LoggerFactory.getLogger(MyJob.class); @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { logger.info("Executing My Job ..."); // 执行需要执行的任务 } } ``` 4. 测试 现在,我们已经完成了 Quartz配置和 Job 类的创建。我们可以启动应用程序并等待定时任务的执行。如果一切正常,应该会看到类似以下的输出: ``` INFO c.e.q.MyJob - Executing My Job ... ``` 这就是使用 QuartzSpring Boot 执行定时任务的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值