java定时任务,java定时任务关闭

本文目录一览:

java 定时任务的几种实现方式

JDK 自带的定时器实现

// schedule(TimerTask task, long delay) 延迟 delay 毫秒 执行

// schedule(TimerTask task, Date time) 特定时间执行

public static void main(String[] args) {

for (int i = 0; i 10; ++i) {

new Timer(“timer – ” + i).schedule(new TimerTask() {

@Override

public void run() {

println(Thread.currentThread().getName() + ” run “);

}

}, 1000);

}

}

2. 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();

}

3. Spring  boot 任务调度(这个非常容易实现)

/*

*  开启对定时任务的支持

*  在相应的方法上添加@Scheduled声明需要执行的定时任务。

*/

@EnableScheduling

//@EnableScheduling注解来开启对计划任务的支持

public class Application {

public static void main(String[] args) {

SpringApplication.run(Application.class, args);

}

}

@Component

public class ScheduledTasks {

private Logger logger = LoggerFactory.getLogger(ScheduledTasks.class);

private    int     i=0;

//0 0 0 2 * ?

@Scheduled(cron=”*  *  *  2  *  ?”)

//@Scheduled 注解用于标注这个方法是一个定时任务的方法

public void testFixDelay() {

logger.info(“执行方法”+i++);

}

java定时任务没有执行完又到执行时间了

代码错误。多数是代码错误导致java定时任务没有执行完又到执行时间了。

1、首先打开java检查代码是否错误。

2、其次打开网络诊断器进行测试网络连接是否异常。

3、最后点击重新运行java即可。

java 怎么写定时任务

如果要执行一些简单的定时器任务,无须做复杂的控制,也无须保存状态,那么可以考虑使用JDK 入门级的定期器Timer来执行重复任务。

一、原理

JDK中,定时器任务的执行需要两个基本的类:

java.util.Timer;

java.util.TimerTask;

要运行一个定时任务,最基本的步骤如下:

1、建立一个要执行的任务TimerTask。

2、创建一个Timer实例,通过Timer提供的schedule()方法,将 TimerTask加入到定时器Timer中,同时设置执行的规则即可。

当程序执行了Timer初始化代码后,Timer定时任务就会按照设置去执行。

Timer中的schedule()方法是有多种重载格式的,以适应不同的情况。该方法的格式如下:

void schedule(TimerTask task, Date time)

安排在指定的时间执行指定的任务。

void schedule(TimerTask task, Date firstTime, long period)

安排指定的任务在指定的时间开始进行重复的固定延迟执行。

void schedule(TimerTask task, long delay)

安排在指定延迟后执行指定的任务。

void schedule(TimerTask task, long delay, long period)

安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。

Timer是线程安全的,此类可扩展到大量同时安排的任务(存在数千个都没有问题)。其所有构造方法都启动计时器线程。可以调用cancel() 终止此计时器,丢弃所有当前已安排的任务。purge()从此计时器的任务队列中移除所有已取消的任务。此类不提供实时保证:它使用 Object.wait(long) 方法来安排任务。

TimerTask是一个抽象类,由 Timer 安排为一次执行或重复执行的任务。它有一个抽象方法run()—-计时器任务要执行的操作。因此,每个具体的任务类都必须继承TimerTask类,并且重写run()方法。另外它还有两个非抽象的方法:

boolean cancel()

取消此计时器任务。

long scheduledExecutionTime()

返回此任务最近实际 执行的安排 执行时间。

二、例子

下面用Timer实现一个简单例子:

package stu.timer;

import java.util.Date;

import java.util.TimerTask;

/**

* 重复执行的任务

*

* @author leizhimin,2008-10-9 9:20:20

*/

public class TestTimerTask extends TimerTask {

/**

* 此计时器任务要执行的操作。

*/

public void run() {

Date executeTime = new Date(this.scheduledExecutionTime());

System.out.println(“本次任务执行的时间是” + executeTime);

}

}

package stu.timer;

import java.util.Timer;

import java.util.TimerTask;

/**

* 测试JDK Timer的执行

*

* @author leizhimin,2008-10-9 9:24:35

*/

public class TestTimer {

public static void main(String[] args) {

Timer timer = new Timer();

TimerTask task = new TestTimerTask();

timer.schedule(task, 500L, 1000L);

}

}

运行结果:

本次任务执行的时间是Thu Oct 09 09:47:57 CST 2008

本次任务执行的时间是Thu Oct 09 09:47:58 CST 2008

本次任务执行的时间是Thu Oct 09 09:47:59 CST 2008

本次任务执行的时间是Thu Oct 09 09:48:00 CST 2008

本次任务执行的时间是Thu Oct 09 09:48:01 CST 2008

本次任务执行的时间是Thu Oct 09 09:48:02 CST 2008

本次任务执行的时间是Thu Oct 09 09:48:03 CST 2008

本次任务执行的时间是Thu Oct 09 09:48:04 CST 2008

本次任务执行的时间是Thu Oct 09 09:48:05 CST 2008

……

java的几种定时任务

java定时任务有三种:

– JDK自带 :JDK自带的Timer以及JDK1.5+ 新增的ScheduledExecutorService;

– Quartz    :简单却强大的JAVA作业调度框架

– Spring3.0以后自带的task :可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多;

代码参考:

JDK 自带的定时器实现

schedule(TimerTask task, Date time) 特定时间执行

public static void main(String[] args) {

for (int i = 0; i 10; ++i) {

new Timer(“timer – ” + i).schedule(new TimerTask() {

@Override

public void run() {

println(Thread.currentThread().getName() + ” run “);

}

}, new Date(System.currentTimeMillis() + 2000));

}

}

Quartz 定时器实现

2.1  通过maven引入依赖(这里主要介绍2.3.0)  注意:shiro-scheduler中依赖的是1.x版本  如果同时使用会冲突

!– —

dependency

groupIdorg.quartz-scheduler/groupId

artifactIdquartz/artifactId

version2.3.0/version

/dependency

2.2 创建Job类

public class TestJob implements Job{

@Override

public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {

println(Thread.currentThread().getName() + ” test job begin ” + DateUtil.getCurrentTimeStr());

}

}

2.3 调度任务

public static void main(String[] args) throws InterruptedException, SchedulerException {

Scheduler scheduler = new StdSchedulerFactory().getScheduler();

// 开始

scheduler.start();

// job 唯一标识 test.test-1

JobKey jobKey = new JobKey(“test” , “test-1”);

JobDetail jobDetail = JobBuilder.newJob(TestJob.class).withIdentity(jobKey).build();

Trigger trigger = TriggerBuilder.newTrigger() .withIdentity(“test” , “test”)

// 延迟一秒执行

.startAt(new Date(System.currentTimeMillis() + 1000))

// 每隔一秒执行 并一直重复

.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1).repeatForever())

.build();

scheduler.scheduleJob(jobDetail , trigger);

Thread.sleep(5000);

// 删除job

scheduler.deleteJob(jobKey);

}

3.Spring 相关的任务调度

3.1 配置文件实现

spring-schedule.xml

task:scheduler id=”myScheduler” pool-size=”10″ /

task:scheduled-tasks scheduler=”myScheduler”

task:scheduled ref=”job” method=”test” cron=”0 * * * * ?”/

/task:scheduled-tasks

3.2注解实现

spring-schedule.xml

task:scheduler id=”myScheduler” pool-size=”10″ /

// 启用注解

task:annotation-driven scheduler=”myScheduler”/

@Component 

public class Task{    

@Scheduled(cron=”0/5 * *  * * ? “)   //每5秒执行一次

public void execute(){  

DateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);  

System.out.println(sdf.format(DateTime.now().toDate())+”*********B任务每5秒执行一次进入测试”);    

}     

}

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/159361.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-19 18:59
下一篇 2024-11-19 18:59

相关推荐

  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • java client.getacsresponse 编译报错解决方法

    java client.getacsresponse 编译报错是Java编程过程中常见的错误,常见的原因是代码的语法错误、类库依赖问题和编译环境的配置问题。下面将从多个方面进行分析…

    编程 2025-04-29
  • Java腾讯云音视频对接

    本文旨在从多个方面详细阐述Java腾讯云音视频对接,提供完整的代码示例。 一、腾讯云音视频介绍 腾讯云音视频服务(Cloud Tencent Real-Time Communica…

    编程 2025-04-29
  • Java Bean加载过程

    Java Bean加载过程涉及到类加载器、反射机制和Java虚拟机的执行过程。在本文中,将从这三个方面详细阐述Java Bean加载的过程。 一、类加载器 类加载器是Java虚拟机…

    编程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介绍

    本文将详细介绍Java Milvus SearchParam withoutFields的相关知识和用法。 一、什么是Java Milvus SearchParam without…

    编程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java语言中的一个版本,于2014年3月18日发布。本文将从多个方面对Java 8中某一周的周一进行详细的阐述。 一、数组处理 Java 8新特性之一是Stream…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • VSCode为什么无法运行Java

    解答:VSCode无法运行Java是因为默认情况下,VSCode并没有集成Java运行环境,需要手动添加Java运行环境或安装相关插件才能实现Java代码的编写、调试和运行。 一、…

    编程 2025-04-29
  • Java任务下发回滚系统的设计与实现

    本文将介绍一个Java任务下发回滚系统的设计与实现。该系统可以用于执行复杂的任务,包括可回滚的任务,及时恢复任务失败前的状态。系统使用Java语言进行开发,可以支持多种类型的任务。…

    编程 2025-04-29
  • Java 8 Group By 会影响排序吗?

    是的,Java 8中的Group By会对排序产生影响。本文将从多个方面探讨Group By对排序的影响。 一、Group By的概述 Group By是SQL中的一种常见操作,它…

    编程 2025-04-29

发表回复

登录后才能评论