JAVA实现定时任务的方法

简介: JAVA实现定时任务的方法

定时任务是JAVA后台开发需要使用到的技术,比如定时执行发送邮件的通知,定时做数据同步,定时统计一些数据分析,实现定时任务的方式有JAVA原生的方式,有第三方依赖库的实现还有框架的实现。现在列举以下五种主流的方式:

1、JAVA原生的Timer类,早期就有的方法

Timertimer=newTimer();
timer.schedule(newTimerTask() {
@Overridepublicvoidrun() {
//do something    }
}, delay);

2、JAVA原生的ScheduledExecutorService实现,这个是并发包里的

ScheduledExecutorServiceexecutorService=Executors.newScheduledThreadPool(1);
executorService.schedule(newRunnable() {
@Overridepublicvoidrun() {
//do something    }
}, delay, TimeUnit.MILLISECONDS);

3、Quartz第三方库,支持作业管理,可以删除定时任务,开启定时任务,操作很丰富,很多现在封装的XXX-job底层就是使用这个玩意,功能很强大

JobDetailjobDetail=JobBuilder.newJob(MyJob.class).withIdentity("jobName", "jobGroup").build();
Triggertrigger=TriggerBuilder.newTrigger().withIdentity("triggerName", "triggerGroup")
    .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(10).repeatForever())
    .build();
SchedulerFactoryschedulerFactory=newStdSchedulerFactory();
Schedulerscheduler=schedulerFactory.getScheduler();
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);

4、Spring自带的

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>${spring.version}</version>
</dependency>
@Component
public class MyTask {
    @Scheduled(cron = "0 0/5 * * * ?")
    public void run() {
        // do something
    }
}
@EnableScheduling //别忘了在启动类上加这个注解,表示开启定时任务

5、Spring+quartz这里面可以直接使用SpringBoot+quartz,引入spring-boot-starter-quartz快速集成即可

importorg.quartz.*;
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.Configuration;
@ConfigurationpublicclassTaskConfig {
@BeanpublicJobDetailjobDetail() {
returnJobBuilder.newJob(Job.class)
                .withIdentity("JobName")
                .withDescription("JobDescription")
                .build();
    }
@BeanpublicTriggertrigger() {
returnTriggerBuilder.newTrigger()
                .forJob(jobDetail())
//这里面可以使用各种定时任务规则,有简单的,Cron的                .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(5))
                .build();
    }
}

如果对定时任务没有管理要求,只是简单的定时触发或者指定时间触发,一般Spring自带的就可以满足。

目录
相关文章
|
2天前
|
Java
判断不为空和不为空串的方法java
判断不为空和不为空串的方法java
|
2天前
|
Java
Java String 避免空指针的方法
Java String 避免空指针的方法
5 0
|
2天前
|
Java
【Java开发指南 | 第九篇】访问实例变量和方法、继承、接口
【Java开发指南 | 第九篇】访问实例变量和方法、继承、接口
14 4
|
2天前
|
XML JavaScript Java
详解Java解析XML的四种方法
详解Java解析XML的四种方法
15 1
|
2天前
|
存储 Java API
掌握8条方法设计规则,设计优雅健壮的Java方法
掌握8条方法设计规则,设计优雅健壮的Java方法
|
2天前
|
Java C语言
详解java方法与递归
详解java方法与递归
11 3
|
2天前
|
SQL Java 数据库连接
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
11 0
|
2天前
|
Java
Java一分钟之-方法定义与调用基础
【5月更文挑战第8天】本文介绍了Java编程中的方法定义和调用,包括基本结构、常见问题和避免策略。方法定义涉及返回类型、参数列表和方法体,易错点有返回类型不匹配、参数错误和忘记返回值。在方法调用时,要注意参数传递、静态与非静态方法的区分,以及重载方法的调用。避免错误的策略包括明确返回类型、参数校验、理解值传递、区分静态和非静态方法以及合理利用重载。通过学习和实践,可以提升编写清晰、可维护代码的能力。
14 0
|
2天前
|
搜索推荐 Java Shell
8大Java排序方法(由简入繁),有代码详解和原理指导
8大Java排序方法(由简入繁),有代码详解和原理指导
33 0
|
2天前
|
Java API
【亮剑】三种有效的方法来删除List中的重复元素Java的List
【4月更文挑战第30天】本文介绍了三种Java中删除List重复元素的方法:1) 使用HashSet,借助其不允许重复值的特性;2) 利用Java 8 Stream API的distinct()方法;3) 对自定义对象重写equals()和hashCode()。每种方法都附带了代码示例,帮助理解和应用。