Spring定时任务的几种实现 附实例

 我来答
ijava学习网
2018-07-10 · 国内最优秀java资源共享平台
ijava学习网
国内最优秀的java免费资源共享及学习平台,专注从实战中学习与成长。主要包括教程、经验分享、知识、资讯、工具、手册、视频及各种资源下载。
向TA提问
展开全部
1、Java自带的java.util.Timer类,自定义一个类继承TimerTask

例子:

public class TestTimerTask {

Timer timer;

public TestTimerTask(int a) {
timer = new Timer();
timer.schedule(new GoodTimerTask(),0, 1000*a);
}

public static void main(String[] args) {
System.out.println("About to schedule task.");
new TestTimerTask(3);
}

class GoodTimerTask extends TimerTask{

@Override
public void run() {
System.out.println("Timer running!");
}

}
}

2、Spring3.0以后自带的task

//一、在applicationContext.xml配置的方式
//1、准备jar包
// (1)spring核心jar包
//2、在项目中写个类
@Service
public class BookScheduleTask {

@Resource
private BookService bookService;

public Page<Book> findAllBook(){ //不带参数
System.out.println("BookScheduleTask.findAllBook()");
return bookService.findBook(1);
}
}
//3、在ApplicationContext.xml配置文件中写如下配置:
<!-- 自动扫描 -->
<context:component-scan base-package="com" />

<!-- spring框架的Scheduled定时器 -->
<task:scheduled-tasks>
<task:scheduled ref="bookScheduleTask" method="findAllBook" cron="0 0 12 * * ?"/>
</task:scheduled-tasks>

说明:(1)<context:component-scan base-package="com" />该配置,相信大家用过spring的都知道是什么意思,
是spring用于扫描注解的
(2)<task:scheduled-tasks>,该配置的作用是定义一个时间计划任务,定义某个类下面某个方法在某个时间执行。
<task:scheduled ref="bookScheduleTask" method="findAllBook" cron="0 0 12 * * ?"/>,ref表示的是
某个要在规定时间执行的类,method表示要执行的类下的某个方法,cron表示时间表达式,具体详细的表达式
可以百度查询
//二、基于注解的spring定时器
// 1、同上,准备好spring的jar包
// 2、在项目中创建一个类,用于执行定时任务的类。如下:
@Component("bookScheduleTask")
public class BookScheduleTask {

@Resource
private BookService bookService;

@Scheduled(cron="0 50 14 * * ?")
public void findAllBook(){
System.out.println("BookScheduleTask.findAllBook()");
bookService.findBook(1);
}
}
// 说明:基于注解的方法,@Component("bookScheduleTask")表示定义了一个别名。
// @Scheduled(cron="0 50 14 * * ?")表示:该注解下的方法是一个时间任务,在cron="0 50 14 * * ?"(14:50)执行findAllBook()方法

3、使用quartz

//首先我们需要定义一个任务类,比如为MyJob02 ,
//该类需要继承Job类,然后添加execute(JobExecutionContext context)方法,在
//这个方法中就是我们具体的任务执行的地方。
//由希望由调度程序执行的组件实现的接口
public class MyJob02 implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
// TODO Auto-generated method stub
// 执行响应的任务.
System.out.println("HelloJob.execute,"+new Date());}}

public class QuartzTest5 {
public static void main(String[] args) throws Exception {
//SchedulerFactory 是一个接口,用于Scheduler的创建和管理
SchedulerFactory factory = new StdSchedulerFactory();
//从工厂里面拿到一个scheduler实例//计划表(可能翻译的不太贴切),现在我们有了要做的内容,
//与调度程序交互的主要API
/** Scheduler的生命期,从SchedulerFactory创建它时开始,
到Scheduler调用shutdown()方法时结束;Scheduler被创建后,可以增加、删除和列举Job和Trigger,
以及执行其它与调度相关的操作(如暂停Trigger)。但是,Scheduler只有在调用start()方法后,
才会真正地触发trigger(即执行job)*/
Scheduler scheduler = factory.getScheduler();
//具体任务.//用于定义作业的实例
//JobBuilder - 用于定义/构建JobDetail实例,用于定义作业的实例。
JobDetail job = JobBuilder.newJob(MyJob.class).withIdentity("job1", "group1").build();
//Trigger(即触发器) - 定义执行给定作业的计划的组件
//TriggerBuilder - 用于定义/构建触发器实例
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")
.withSchedule(CronScheduleBuilder.cronSchedule("0/1 * * * * ?")).build();
scheduler.scheduleJob(job, trigger);scheduler.start();
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式