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()*/@Overridepublic void sendMsg() {System.out.println("像张三发送一条信息!");}@Overridepublic 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)*/@Overridepublic 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"?>
<beansxmlns="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 {@Testpublic 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();//延迟10000msThread.sleep(100000);//关闭sche.shutdown();}/*** @throws InterruptedException * * @Title: testSpring* @Description: 该方法的主要作用通过spring实现quartz* @param   设定文件  * @return  返回类型:void   * @throws*/@Testpublic void testSpring() throws InterruptedException{ApplicationContext ctx = new  ClassPathXmlApplicationContext("applicationContext.xml");Thread.sleep(10000);}}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327456.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中国有超级计算机的大学,计算机专业排名看超算实力,ASC竞赛五大高校排名,中山大学第一...

ASC竞赛五大高校计算机专业的实力主要体现在算法与编程的逻辑运算上&#xff0c;因此计算机专业必须掌握大量基础数学知识&#xff0c;甚至很多是离散数学、模糊数学等人工智能逻辑数学&#xff0c;简单的程序软件应用和O2O程序实现其实都不是计算机专业实力的体现&#xff0c;…

IntelliJ IDEA设置JDK版本

IntelliJ IDEA设置JDK版本 临渊行 2019-06-13 13:59:13 46888 收藏 30 分类专栏&#xff1a; 这里有个坑 版权 一、背景 即使我电脑安装的JDK版本是8&#xff0c;然而在idea运行中常常提示xxjdk1.5已过时之类的&#xff0c;why?明明是我装的JDK8啊 二、解决 鼠标点击f…

从抵触到力推,.Net Core的成功让微软正视开源

微软在两年前做了一件当时非常令人惊讶的事情&#xff1a;将 .Net Core 开源。在此之前&#xff0c;微软曾表示开源是对软件经济的威胁。或许是为了更好的销售工具和云服务&#xff0c;亦或许是为了吸引更多的开发者到其平台&#xff0c;微软开始开源。到目前为止&#xff0c;这…

vue的基本项目结构

vue的基本项目结构 ├── README.md 项目介绍 ├── index.html 入口页面 ├── build 构建脚本目录 │ ├── build-server.js 运行本地构建服务器&#xff0c;可以访问构建后的页面 │ ├── build.js 生产环境…

线程池的原理及实现

转载自 线程池的原理及实现 1、线程池简介&#xff1a; 多线程技术主要解决处理器单元内多个线程执行的问题&#xff0c;它可以显著减少处理器单元的闲置时间&#xff0c;增加处理器单元的吞吐能力。 假设一个服务器完成一项任务所需时间为&#xff1a;T1 创建线…

计算机考试行高怎么设置,Excel隔行调整行高的四种有效方法

领导要求把一份Excel表格的偶数行行高调整一下。这份表格可是有上百行的&#xff0c;逐一调整行高显然是不科学的。几经周折&#xff0c;费了我N多的口舌四处讨教&#xff0c;这个任务还是顺利地完成了。一、直接定位法先在表格的最后增加一个辅助列。在该列的第一行的单元格中…

亲身体验Intellij Idea从卡顿到顺畅

亲身体验Intellij Idea从卡顿到顺畅 idea power save mode 指尖飘落的程序 2018-01-16 14:12:12 11991 收藏 1 分类专栏&#xff1a; 工具 版权 power save mode 开启后代码不提示&#xff0c; 省电模式&#xff08;经典模式&#xff1a;适用低配版电脑&#xff09; htt…

在收购 Sun 的六年后,Oracle 终于瞄准了 Java 的非付费用户

你还在认为 Java 是免费的吗&#xff1f;再想想&#xff01;&#xff08;2017年你会欠我们很多钱&#xff09; 在收购了 Sun 公司的六年后&#xff0c;Oracle 正在大规模的加大对违反其许可证的 Java 客户的审查力度。 越来越多的 Oracle 客户和合作伙伴被拉里埃里森的团队约谈…

mysql卸载再安装作死级尝试(测试前记得备份数据库)

安装之前一定要将自己的mysql清理干净 1、下载后得到zip压缩包. 2、解压到自己想要安装到的目录&#xff0c;本人解压到的是D:\Environment\mysql-5.7.19 3、添加环境变量&#xff1a;我的电脑->属性->高级->环境变量 选择PATH,在其后面添加: 你的mysql 安装文件下…

最全三大框架整合(使用映射)——Emp.hbm.xml

<?xml version"1.0" encoding"utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file au…

按逆向思维定义软件测试,软件测试基础相关概念

测试基础知识是2008-9-20笔记整理&#xff0c;大部份内容来自软件评测师教程&#xff0c;年限已久&#xff0c;有些笔记已丢失。一&#xff0c;理清测试相关概念1&#xff0c;质量 &#xff1a; 实体特性的总和&#xff0c;满足明确或隐含要求的能力2&#xff0c;软件质量 &…

‘entityManagerFactory‘ that could not be found

springboot结合spring data jpa出现a bean named entityManagerFactory that could not be found 羿 2018-10-28 23:46:30 9064 收藏 1 Consider defining a bean named ‘entityManagerFactory’ in your configuration出现的解决方法 原文&#xff1a;https://blog.csdn.…

分享我的第一个asp.net core开发过程

.net core 这个东西感觉还是很不错的&#xff0c;学习了一下&#xff0c;并且做了一个微服务(IP地址查询服务) http://vju.cc/ip/ipquery 看上他的跨平台功能&#xff0c;所以就研究一下&#xff0c;中间有不少坑&#xff0c;有很多第三方类库还不支持.net core&#xff0c;就连…

Java并发编程:深入剖析ThreadLocal

转载自 Java并发编程&#xff1a;深入剖析ThreadLocal 一.对ThreadLocal的理解 ThreadLocal&#xff0c;很多地方叫做线程本地变量&#xff0c;也有些地方叫做线程本地存储&#xff0c;其实意思差不多。可能很多朋友都知道ThreadLocal为变量在每个线程中都创建了一个副本&…

最全三大框架整合(使用映射)——Dept.hbm.xml

<?xml version"1.0" encoding"utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file au…

软件测试遇到的异常情况,豪之诺软件测试项目开发中遇到比较多的Bug总结

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼在当前正在开发的项目中&#xff0c;最近进入测试阶段&#xff0c;遇到了几个比较揪心的问题&#xff1a;  其一&#xff0c;数据插入问题&#xff0c;在上一篇博客中大致也是解决了这一问题&#xff0c;虽说没有解决所有的&…

【spring boot】启动类启动 错误: 找不到或无法加载主类 com.codingapi.tm.TxManagerApplication 的解决方案

【spring boot】启动类启动 错误: 找不到或无法加载主类 com.codingapi.tm.TxManagerApplication 的解决方案 导入的一个外部的spring boot项目&#xff0c;运行启动类&#xff0c;出现错误&#xff1a;找不到或无法加载主类 com.codingapi.tm.TxManagerApplication 解决方案…

Rest环境搭建:服务提供者和消费者---SpringCloud

Rest环境搭建&#xff1a;服务提供者和消费者 4.1 介绍 我们会使用一个Dept部门模块做一个微服务通用案例Consumer消费者(Client)通过REST调用Provider提供者(Server)提供的服务。回顾Spring&#xff0c;SpringMVC&#xff0c;Mybatis等以往学习的知识。Maven的分包分模块架构…

Java 多线程 并发编程

转载自 Java 多线程 并发编程 一、多线程 1、操作系统有两个容易混淆的概念&#xff0c;进程和线程。 进程&#xff1a;一个计算机程序的运行实例&#xff0c;包含了需要执行的指令&#xff1b;有自己的独立地址空间&#xff0c;包含程序内容和数据&#xff1b;不同进程的地…

get√—搜索微信公众号【Dotnet跨平台】指定文章的办法

有同学是刚关注“Dotnet跨平台”微信公众号的&#xff0c;结果没看到以前的很多信息&#xff0c;尤其是有用信息&#xff0c;查看历史消息时&#xff0c;有时信息太多&#xff0c;光来回滑动可能要好久&#xff0c;好消息是&#xff0c;微信其实早就支持搜索指定公众号的历史文…