java三大框架实现任务调度——IRemindService

         java实现任务调度,主要分为几个步骤:

            1.创建一个服务
            2.创建一个任务类,将服务作为一个任务去完成(实现job接口)
            3.创建一个任务类实体
            4.创建一个触发器,指定触发规则
            5.创建一个调度,绑定任务和触发器

接下来我们先看看IRemindService接口的代码:

  1. /**
  2. * @Title: IRemindService.java
  3. * @Package org.service
  4. * @Description: TODO该方法的主要作用:
  5. * @author A18ccms A18ccms_gmail_com
  6. * @date 2017-5-26 下午7:54:13
  7. * @version V1.0
  8. */
  9. package org.service;
  10. /**
  11. *
  12. * 项目名称:spring_Schop07
  13. * 类名称:IRemindService
  14. * 类描述:
  15. * 创建人:Mu Xiongxiong
  16. * 创建时间:2017-5-26 下午7:54:13
  17. * 修改人:Mu Xiongxiong
  18. * 修改时间:2017-5-26 下午7:54:13
  19. * 修改备注:
  20. * @version
  21. *
  22. */
  23. public interface IRemindService {
  24. void sendMsg();
  25. void sendMsg(String userName);
  26. }
      它的实现类也很简单,简单看看就行,重点不在这里,这里只是拟定一个任务,主要的调度在后面:

  1. /**
  2. * @Title: RemindServiceImpl.java
  3. * @Package org.service.impl
  4. * @Description: TODO该方法的主要作用:
  5. * @author A18ccms A18ccms_gmail_com
  6. * @date 2017-5-26 下午7:55:19
  7. * @version V1.0
  8. */
  9. package org.service.impl;
  10. import org.service.IRemindService;
  11. /**
  12. *
  13. * 项目名称:spring_Schop07
  14. * 类名称:RemindServiceImpl
  15. * 类描述:
  16. * 创建人:Mu Xiongxiong
  17. * 创建时间:2017-5-26 下午7:55:19
  18. * 修改人:Mu Xiongxiong
  19. * 修改时间:2017-5-26 下午7:55:19
  20. * 修改备注:
  21. * @version
  22. *
  23. */
  24. public class RemindServiceImpl implements IRemindService {
  25. /**(非 Javadoc)
  26. * <p>Title: sendMsg</p>
  27. * <p>Description(描述): </p>
  28. * @see org.service.IRemindService#sendMsg()
  29. */
  30. @Override
  31. public void sendMsg() {
  32. System.out.println("像张三发送一条信息!");
  33. }
  34. @Override
  35. public void sendMsg(String userName) {
  36. System.out.println("像"+userName+"发送一条信息!");
  37. }
  38. }

要想实现任务调度,那么久得实现Job接口,具体代码如下:

  1. /**
  2. * @Title: RemindJob.java
  3. * @Package org.service.impl
  4. * @Description: TODO该方法的主要作用:
  5. * @author A18ccms A18ccms_gmail_com
  6. * @date 2017-5-26 下午7:58:09
  7. * @version V1.0
  8. */
  9. package org.service.impl;
  10. import org.quartz.Job;
  11. import org.quartz.JobExecutionContext;
  12. import org.quartz.JobExecutionException;
  13. import org.service.IRemindService;
  14. /**
  15. *
  16. * 项目名称:spring_Schop07
  17. * 类名称:RemindJob
  18. * 类描述:
  19. * 创建人:Mu Xiongxiong
  20. * 创建时间:2017-5-26 下午7:58:09
  21. * 修改人:Mu Xiongxiong
  22. * 修改时间:2017-5-26 下午7:58:09
  23. * 修改备注:
  24. * @version
  25. *
  26. */
  27. public class RemindJob implements Job {
  28. /**(非 Javadoc)
  29. * <p>Title: execute</p>
  30. * <p>Description(描述): 任务调度</p>
  31. * @param arg0
  32. * @throws JobExecutionException
  33. * @see org.quartz.Job#execute(org.quartz.JobExecutionContext)
  34. */
  35. @Override
  36. public void execute(JobExecutionContext context) throws JobExecutionException {
  37. IRemindService remindService = new RemindServiceImpl();
  38. System.out.println("任务:"+context.getJobDetail().getName());
  39. remindService.sendMsg(context.getJobDetail().getJobDataMap().getString("user"));
  40. }
  41. }

接下来看看spring里面是如何配置的:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans
  3. xmlns="http://www.springframework.org/schema/beans"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xmlns:p="http://www.springframework.org/schema/p"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
  7. <!--
  8. 1.创建任务实体类
  9. 2.创建触发器
  10. 3.创建调度(注入数据)
  11. -->
  12. <!-- <bean id="detailJob" class="org.springframework.scheduling.quartz.JobDetailBean">
  13. <property name="jobClass" value="org.service.impl.RemindJob"></property>
  14. <property name="jobDataMap">
  15. <map>
  16. <entry key="user" value="王五"></entry>
  17. </map>
  18. </property>
  19. </bean> -->
  20. <bean id="remindService" class="org.service.impl.RemindServiceImpl"></bean>
  21. <!-- 讲普通的javaBean定义为任务,而省略了任务类 -->
  22. <bean id="detailJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  23. <property name="targetObject" ref="remindService"></property>
  24. <property name="targetMethod" value="sendMsg"></property>
  25. <property name="arguments">
  26. <list>
  27. <value>赵六</value>
  28. </list>
  29. </property>
  30. </bean>
  31. <!-- 简单触发器 -->
  32. <bean id="trigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
  33. <property name="repeatCount" value="-1"></property>
  34. <property name="repeatInterval" value="3000"></property>
  35. <property name="startDelay" value="1000"></property>
  36. <property name="jobDetail" ref="detailJob"></property>
  37. </bean>
  38. <!-- 复杂触发器 -->
  39. <!-- <bean id="trigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
  40. <property name="jobDetail" ref="detailJob"></property>
  41. <property name="cronExpression" value="0 39 22 26 * ?"></property>
  42. </bean> -->
  43. <bean id="sche" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  44. <property name="triggers">
  45. <list>
  46. <ref bean="trigger"/>
  47. </list>
  48. </property>
  49. </bean>
  50. </beans>

代码都编写完毕,我们来测试一下:

  1. package org.service.impl;
  2. import java.text.ParseException;
  3. import java.util.Date;
  4. import org.junit.Test;
  5. import org.quartz.CronTrigger;
  6. import org.quartz.JobDetail;
  7. import org.quartz.Scheduler;
  8. import org.quartz.SchedulerException;
  9. import org.quartz.SchedulerFactory;
  10. import org.quartz.SimpleTrigger;
  11. import org.quartz.impl.StdSchedulerFactory;
  12. import org.springframework.context.ApplicationContext;
  13. import org.springframework.context.support.ClassPathXmlApplicationContext;
  14. /**
  15. *
  16. *
  17. * 项目名称:spring_Schop07
  18. * 类名称:RemindServiceImplTest
  19. * 类描述: 测试类
  20. * 创建人:Mu Xiongxiong
  21. * 创建时间:2017-5-26 下午8:04:00
  22. * 修改人:Mu Xiongxiong
  23. * 修改时间:2017-5-26 下午8:04:00
  24. * 修改备注:
  25. * @version
  26. *
  27. */
  28. public class RemindServiceImplTest {
  29. @Test
  30. public void testMethod() throws SchedulerException, InterruptedException, ParseException {
  31. //创建任务实体
  32. JobDetail jobDetail = new JobDetail("job1","group1",RemindJob.class);
  33. //给任务传递数据
  34. jobDetail.getJobDataMap().put("user","李四");
  35. //创建简单触发器
  36. SimpleTrigger trigger = new SimpleTrigger("trigger1",SimpleTrigger.REPEAT_INDEFINITELY,3000);
  37. //复杂触发器
  38. //每个月的26号 21:20:00
  39. //CronTrigger trigger = new CronTrigger("tigger3","group2","0 30 21 26 * ?");
  40. //开始时间(当前毫秒数+1秒,延迟一秒)
  41. trigger.setStartTime(new Date(System.currentTimeMillis()+1000));
  42. //创建调度器
  43. SchedulerFactory sfc = new StdSchedulerFactory();
  44. Scheduler sche = sfc.getScheduler();
  45. //注册任务和触发器
  46. sche.scheduleJob(jobDetail, trigger);
  47. //启动任务工程
  48. sche.start();
  49. //延迟10000ms
  50. Thread.sleep(100000);
  51. //关闭
  52. sche.shutdown();
  53. }
  54. /**
  55. * @throws InterruptedException
  56. *
  57. * @Title: testSpring
  58. * @Description: 该方法的主要作用通过spring实现quartz
  59. * @param 设定文件
  60. * @return 返回类型:void
  61. * @throws
  62. */
  63. @Test
  64. public void testSpring() throws InterruptedException{
  65. ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
  66. Thread.sleep(10000);
  67. }
  68. }


原文地址:https://www.cnblogs.com/jpfss/p/9598987.html