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);
-
}
-
-
}
java三大框架实现任务调度——IRemindService的更多相关文章
- Java三大框架 介绍
三大框架:Struts+hibernate+spring Java三大框架主要用来做WEN应用. Struts主要负责表示层的显示 Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作 ...
- java 三大框架 介绍
三大框架:Struts+Hibernate+Spring Java三大框架主要用来做WEN应用. Struts主要负责表示层的显示 Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作 ...
- [转]JAVA三大框架SSH和MVC
Java—SSH(MVC) JAVA三大框架的各自作用 hibernate是底层基于jdbc的orm(对象关系映射)持久化框架,即:表与类的映射,字段与属性的映射,记录与对象的映射 数据库模型 也就 ...
- JAVA三大框架的各自作用
http://christhb.blog.163.com/blog/static/98982492011727114936239/ 一.Spring Spring是一个解决了许多在J2EE开发中常见的 ...
- JAVA三大框架SSH的各自作用
一.Spring Spring是一个解决了许多在J2EE开发中常见的问题的强大框架. Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯. Spring的 ...
- java三大框架介绍
常听人提起三大框架,关于三大框架,做了如下了解: 三大框架:Struts+Hibernate+Spring java三大框架主要用来做WEN应用. Struts主要负责表示层的显示 Spring利用它 ...
- JAVA三大框架SSH和MVC
Java—SSH(MVC) JAVA三大框架的各自作用 hibernate是底层基于jdbc的orm(对象关系映射)持久化框架,即:表与类的映射,字段与属性的映射,记录与对象的映射 数据库模型 ...
- 浅谈Java三大框架与应用
前言:对于一个程序员来说,尤其是在java web端开发的程序员,三大框架:Struts+Hibernate+Spring是必须要掌握熟透的,因此,下面谈谈java三大框架的基本概念和原理. JAVA ...
- java 三大框架 hibernate部分知识实现增删该查操作
1.三层架构 表现层 web层(MVC是一个表现层的设计模型) 业务层 service层 持久层 dao层2.三大框架和三层架构的关系(建议学习三大框架的顺序:先学习hibernat ...
随机推荐
- 对象的序列化与反序列化---IO学习笔记(四)
对象的序列化,反序列化 对象的序列化: 就是将Object转换成byte序列 对象的反序列化: 将byte序列转换成Object 序列化流.反序列化流 序列化流(ObjectOutputStream) ...
- 含有过滤功能的android流式布局
FilterFlowLayout 含有过滤功能的流式布局, 參考FlowLayout 能够去除宽度不在范围(比例或真实值)内的子view 能够设置最大行数 能够加入组件间水平间距 能够加入行间距 系统 ...
- 【例题 7-3 UVA - 10976】Fractions Again?!
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] x>=y => \(\frac{1}{x}<=\frac{1}{y}\) => \(\frac{1}{x}= ...
- Tomcat redis 配置
http://www.cnblogs.com/interdrp/p/4868740.html http://blog.csdn.net/qq584852076/article/details/4650 ...
- 比較C++和Java 二
26.Java内置多线程支持.你能够通过继承Thread类来创建一个新的线程(重写run()方法).相互排斥发生在使用synchronized关键字作为类型修饰符修饰方法的对象级别. 在任一时刻,仅仅 ...
- Ubuntu VMware Tools安装详细过程(非常靠谱)
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 一.前言 VMware Ubuntu安装以及详细过程:https://blog.csdn.net/qq_41782425/arti ...
- dp hdu5653 xiaoxin and his watermelon candy
传送门:点击打开链接 题意:有n个箱子排成一排,有m个炸弹.位置告诉你.如今炸弹的左边伤害和右边伤害能够自己控制,要求 每一个炸弹炸的箱子数的累乘,输出答案取log2并乘以1e6 思路:直接2for ...
- [Debug] Use Snippets to Store Behaviors in Chrome DevTools
Using the Snippets tab in the source devtool you can define and run arbitrary pieces of code in your ...
- Cocos2d-X开发中国象棋《八》走棋
在上一节中实现了新局,至此中国象棋的准备工作差点儿相同都完毕了,在接下来的博客中将介绍玩家的走棋和一些游戏属性的设置,今天先介绍走棋和走棋规则 老规则,先看走棋的效果图,然后依据效果图一步一步分析游戏 ...
- Android基础新手教程——1.2 开发环境搭建
Android基础新手教程--1.2 开发环境搭建 标签: Android基础新手教程 如今主流的Android开发环境有: ①Eclipse + ADT + SDK ②Android Studio ...