zoukankan      html  css  js  c++  java
  • 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. }


  • 相关阅读:
    [算法]统计排序(桶排序)
    [算法]使用bitmap高效进行矩阵运算
    [C++]搞清楚类中构造与析构的顺序
    [C++]关于友元的总结
    [mysql]视图(转)
    [mysql]存储过程(转)
    [C++]对象模型总结
    [mysql]Linux下C语言连接mysql
    [python]使用xml.dom读写XML文件
    Windows 10 64位操作系统 下安装、配置、启动、登录、连接测试oracle 11g
  • 原文地址:https://www.cnblogs.com/jpfss/p/9598987.html
Copyright © 2011-2022 走看看