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

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

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

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

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

/**  
* @Title: IRemindService.java
* @Package org.service
* @Description: TODO该方法的主要作用:
* @author A18ccms A18ccms_gmail_com  
* @date 2017-5-26 下午7:54:13
* @version V1.0  
*/
package org.service;
 /**   
 *    
 * 项目名称:spring_Schop07   
 * 类名称:IRemindService   
 * 类描述:   
 * 创建人:Mu Xiongxiong  
 * 创建时间:2017-5-26 下午7:54:13   
 * 修改人:Mu Xiongxiong   
 * 修改时间:2017-5-26 下午7:54:13   
 * 修改备注:   
 * @version    
 *    
 */
public interface IRemindService {
  
  void sendMsg();
  
  void sendMsg(String userName);
}

     它的实现类也很简单,简单看看就行,重点不在这里,这里只是拟定一个任务,主要的调度在后面:

/**  
* @Title: RemindServiceImpl.java
* @Package org.service.impl
* @Description: TODO该方法的主要作用:
* @author A18ccms A18ccms_gmail_com  
* @date 2017-5-26 下午7:55:19
* @version V1.0  
*/
package org.service.impl;
import org.service.IRemindService;
 /**   
 *    
 * 项目名称:spring_Schop07   
 * 类名称:RemindServiceImpl   
 * 类描述:   
 * 创建人:Mu Xiongxiong  
 * 创建时间:2017-5-26 下午7:55:19   
 * 修改人:Mu Xiongxiong   
 * 修改时间:2017-5-26 下午7:55:19   
 * 修改备注:   
 * @version    
 *    
 */
public class RemindServiceImpl implements IRemindService {
  /**(非 Javadoc)
   * <p>Title: sendMsg</p>
   * <p>Description(描述): </p>
   * @see org.service.IRemindService#sendMsg()
   */
  @Override
  public void sendMsg() {
    System.out.println("像张三发送一条信息!");
  }
  @Override
  public void sendMsg(String userName) {
    System.out.println("像"+userName+"发送一条信息!");
    
  }
}

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

/**  
* @Title: RemindJob.java
* @Package org.service.impl
* @Description: TODO该方法的主要作用:
* @author A18ccms A18ccms_gmail_com  
* @date 2017-5-26 下午7:58:09
* @version V1.0  
*/
package org.service.impl;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.service.IRemindService;
 /**   
 *    
 * 项目名称:spring_Schop07   
 * 类名称:RemindJob   
 * 类描述:   
 * 创建人:Mu Xiongxiong  
 * 创建时间:2017-5-26 下午7:58:09   
 * 修改人:Mu Xiongxiong   
 * 修改时间:2017-5-26 下午7:58:09   
 * 修改备注:   
 * @version    
 *    
 */
public class RemindJob implements Job {
  /**(非 Javadoc)
   * <p>Title: execute</p>
   * <p>Description(描述): 任务调度</p>
   * @param arg0
   * @throws JobExecutionException
   * @see org.quartz.Job#execute(org.quartz.JobExecutionContext)
   */
  @Override
  public void execute(JobExecutionContext context) throws JobExecutionException {
    IRemindService remindService = new  RemindServiceImpl();
    System.out.println("任务:"+context.getJobDetail().getName());
    remindService.sendMsg(context.getJobDetail().getJobDataMap().getString("user"));
  }
}


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

<?xml version="1.0" encoding="UTF-8"?>
<beans
  xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:p="http://www.springframework.org/schema/p"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
  <!-- 
    1.创建任务实体类 
    2.创建触发器
    3.创建调度(注入数据)
  -->
  <!-- <bean id="detailJob" class="org.springframework.scheduling.quartz.JobDetailBean">
     <property name="jobClass" value="org.service.impl.RemindJob"></property> 
     <property name="jobDataMap">
      <map>
        <entry key="user" value="王五"></entry>
      </map>
     </property>
  </bean> -->
  
  <bean id="remindService" class="org.service.impl.RemindServiceImpl"></bean>
  <!-- 讲普通的javaBean定义为任务,而省略了任务类 -->
  <bean id="detailJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject" ref="remindService"></property>
    <property name="targetMethod" value="sendMsg"></property>
    <property name="arguments">
      <list>
        <value>赵六</value>
      </list>
    </property>
  </bean>
  
  <!-- 简单触发器 -->
   <bean id="trigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
    <property name="repeatCount" value="-1"></property>
    <property name="repeatInterval" value="3000"></property>
    <property name="startDelay" value="1000"></property>
    <property name="jobDetail" ref="detailJob"></property>
  </bean> 
  
  <!-- 复杂触发器 -->
  <!-- <bean id="trigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail" ref="detailJob"></property>
    <property name="cronExpression" value="0 39 22 26 * ?"></property>
  </bean> -->
  
  <bean id="sche" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
      <list>
        <ref bean="trigger"/>
      </list>
    </property>
  </bean>
</beans>


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

package org.service.impl;
import java.text.ParseException;
import java.util.Date;
import org.junit.Test;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
 * 
*    
* 项目名称:spring_Schop07   
* 类名称:RemindServiceImplTest   
* 类描述:   测试类
* 创建人:Mu Xiongxiong  
* 创建时间:2017-5-26 下午8:04:00   
* 修改人:Mu Xiongxiong   
* 修改时间:2017-5-26 下午8:04:00   
* 修改备注:   
* @version    
*
 */
public class RemindServiceImplTest {
  @Test
  public void testMethod() throws SchedulerException, InterruptedException, ParseException {
    //创建任务实体
    JobDetail jobDetail  = new JobDetail("job1","group1",RemindJob.class);
    //给任务传递数据
    jobDetail.getJobDataMap().put("user","李四");
    
    //创建简单触发器
    SimpleTrigger trigger = new SimpleTrigger("trigger1",SimpleTrigger.REPEAT_INDEFINITELY,3000);
    
    //复杂触发器
    //每个月的26号 21:20:00
    //CronTrigger trigger = new CronTrigger("tigger3","group2","0 30 21 26 * ?");
    //开始时间(当前毫秒数+1秒,延迟一秒)
    trigger.setStartTime(new Date(System.currentTimeMillis()+1000));
    //创建调度器
    SchedulerFactory sfc = new StdSchedulerFactory();
    Scheduler sche = sfc.getScheduler();
    //注册任务和触发器
    sche.scheduleJob(jobDetail, trigger);
    //启动任务工程
    sche.start();
    //延迟10000ms
    Thread.sleep(100000);
    //关闭
    sche.shutdown();
  }
  
  
  /**
   * @throws InterruptedException 
   * 
  * @Title: testSpring
  * @Description: 该方法的主要作用通过spring实现quartz
  * @param   设定文件  
  * @return  返回类型:void   
  * @throws
   */
  @Test
  public void testSpring() throws InterruptedException{
    ApplicationContext ctx = new  ClassPathXmlApplicationContext("applicationContext.xml");
    Thread.sleep(10000);
  }
}


相关文章
|
7天前
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
31 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
1月前
|
并行计算 算法 Java
Java中的Fork/Join框架详解
Fork/Join框架是Java并行计算的强大工具,尤其适用于需要将任务分解为子任务的场景。通过正确使用Fork/Join框架,可以显著提升应用程序的性能和响应速度。在实际应用中,应结合具体需求选择合适的任务拆分策略,以最大化并行计算的效率。
51 23
|
2月前
|
存储 安全 Java
Java 集合框架中的老炮与新秀:HashTable 和 HashMap 谁更胜一筹?
嗨,大家好,我是技术伙伴小米。今天通过讲故事的方式,详细介绍 Java 中 HashMap 和 HashTable 的区别。从版本、线程安全、null 值支持、性能及迭代器行为等方面对比,帮助你轻松应对面试中的经典问题。HashMap 更高效灵活,适合单线程或需手动处理线程安全的场景;HashTable 较古老,线程安全但性能不佳。现代项目推荐使用 ConcurrentHashMap。关注我的公众号“软件求生”,获取更多技术干货!
53 3
|
3月前
|
存储 缓存 安全
Java 集合框架优化:从基础到高级应用
《Java集合框架优化:从基础到高级应用》深入解析Java集合框架的核心原理与优化技巧,涵盖列表、集合、映射等常用数据结构,结合实际案例,指导开发者高效使用和优化Java集合。
72 4
|
3月前
|
Java 数据库
在Java中使用Seata框架实现分布式事务的详细步骤
通过以上步骤,利用 Seata 框架可以实现较为简单的分布式事务处理。在实际应用中,还需要根据具体业务需求进行更详细的配置和处理。同时,要注意处理各种异常情况,以确保分布式事务的正确执行。
|
3月前
|
消息中间件 Java Kafka
在Java中实现分布式事务的常用框架和方法
总之,选择合适的分布式事务框架和方法需要综合考虑业务需求、性能、复杂度等因素。不同的框架和方法都有其特点和适用场景,需要根据具体情况进行评估和选择。同时,随着技术的不断发展,分布式事务的解决方案也在不断更新和完善,以更好地满足业务的需求。你还可以进一步深入研究和了解这些框架和方法,以便在实际应用中更好地实现分布式事务管理。
|
3月前
|
开发框架 Java 关系型数据库
Java哪个框架适合开发API接口?
在快速发展的软件开发领域,API接口连接了不同的系统和服务。Java作为成熟的编程语言,其生态系统中出现了许多API开发框架。Magic-API因其独特优势和强大功能,成为Java开发者优选的API开发框架。本文将从核心优势、实际应用价值及未来展望等方面,深入探讨Magic-API为何值得选择。
135 2
|
3月前
|
Java 数据库连接 API
Spring 框架的介绍(Java EE 学习笔记02)
Spring是一个由Rod Johnson开发的轻量级Java SE/EE一站式开源框架,旨在解决Java EE应用中的多种问题。它采用非侵入式设计,通过IoC和AOP技术简化了Java应用的开发流程,降低了组件间的耦合度,支持事务管理和多种框架的无缝集成,极大提升了开发效率和代码质量。Spring 5引入了响应式编程等新特性,进一步增强了框架的功能性和灵活性。
78 0
|
3月前
|
前端开发 Java 数据库连接
你不可不知道的JAVA EE 框架有哪些?
本文介绍了框架的基本概念及其在编程领域的应用,强调了软件框架作为通用、可复用的软件环境的重要性。文章分析了早期Java EE开发中使用JSP+Servlet技术的弊端,包括可维护性差和代码重用性低等问题,并阐述了使用框架的优势,如提高开发效率、增强代码规范性和可维护性及提升软件性能。最后,文中详细描述了几种主流的Java EE框架,包括Spring、Spring MVC、MyBatis、Hibernate和Struts 2,这些框架通过提供强大的功能和支持,显著提升了Java EE应用的开发效率和稳定性。
239 1
|
3月前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
268 3