近年来,随着互联网技术的不断发展,大量的计算机软件需要进行定时任务的管理,来判断是否有数据需要自动提交处理等等。因此,定时任务已经成为了Java程序员的必备技能。然而,随着任务数量的增长,相应的管理也变得越来越繁琐,力求提高其效率和控制力的需求也变得日益迫切。因此,数据库方式管理成为了一个很好的解决方案。本文旨在介绍Java定时任务的管理方式,着眼于数据库方式管理的具体实践。
成都一家集口碑和实力的网站建设服务商,拥有专业的企业建站团队和靠谱的建站技术,10年企业及个人网站建设经验 ,为成都上1000+客户提供网页设计制作,网站开发,企业网站制作建设等服务,包括成都营销型网站建设,品牌网站制作,同时也为不同行业的客户提供成都做网站、网站建设的服务,包括成都电商型网站制作建设,装修行业网站制作建设,传统机械行业网站建设,传统农业行业网站制作建设。在成都做网站,选网站制作建设服务商就选创新互联。
一、Java定时任务的常见管理方式
1.使用Schedule类来管理任务:Java官方提供了一个Schedule类,可以用于对任务的调度,该类提供了多个接口来实现任务的定时执行,详见https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ScheduledExecutorService.html。
2.使用Quartz框架管理任务:Quartz是一个Java的任务调度框架,提供了强大的任务调度功能,支持集群、多线程调度。
3.使用Spring框架管理任务:Spring框架是一个Java的应用程序开发框架,用于简化企业级应用程序开发,包括任务调度、面向切面编程等等。
二、为什么要采用数据库方式管理Java定时任务?
上述三种方式无论哪种,都有其自身的特点和优劣势,但是这些方式均需要程序员进行代码实现和管理,一旦任务数量较多可能导致管理繁琐,效率低下的问题。同时,Java应用程序一旦停止运行,所有的任务也会随之中断,需要重新开始执行,这样很容易导致数据丢失,因此需要一个更为稳定可靠的解决方案。次之,如果使用了第三方框架,需要对框架进行熟悉,且场景过于简单的使用方式不一定能够满足复杂的使用场景。在此情况下,我们可以使用数据库方式管理Java定时任务。
三、如何采用数据库方式管理Java定时任务?
数据库方式管理Java定时任务,需要提前创建好Table,这个Table中需要包括以下几个字段:ID,TASK_NAME,TASK_TYPE,TASK_PARAM,CRON_EXPRESSION,START_TIME,END_TIME,STATE。然后再将Table映射成Java对象。如下图所示:
![image.png](https://cdn.nlark.com/yuque/0/2023/png/21884493/1659559992261-2a1718d7-2f2b-45b0-9236-8e6bb5728596.png)
任务定义表结构
1.定时任务的核心代码:
“`java
@Service
public class TaskSchedulerServiceImpl implements TaskSchedulerService {
@Autowired
private TaskSchedulerDao taskSchedulerDao;
@Override
public void schedule(String taskName, String taskType, String taskParam, String cronExpression) {
TaskSchedulerEntity taskSchedulerEntity = new TaskSchedulerEntity();
taskSchedulerEntity.setTaskName(taskName);
taskSchedulerEntity.setTaskType(taskType);
taskSchedulerEntity.setTaskParam(taskParam);
taskSchedulerEntity.setCronExpression(cronExpression);
taskSchedulerDao.insert(taskSchedulerEntity);
}
@Override
public void start(Long taskId) {
TaskSchedulerEntity taskSchedulerEntity = taskSchedulerDao.selectById(taskId);
if (taskSchedulerEntity == null) {
throw new RuntimeException();
}
// 创建 JobDetl 实例,并与 HelloJob 类绑定
JobDetl jobDetl = JobBuilder.newJob(DynamicJob.class)
.withIdentity(taskSchedulerEntity.getTaskName(), taskSchedulerEntity.getTaskType()).build();
jobDetl.getJobDataMap().put(“jobParam”, taskSchedulerEntity.getTaskParam());
// 创建 CronTrigger 对象,指定任务触发的时间规则
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(taskSchedulerEntity.getCronExpression());
CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(taskSchedulerEntity.getTaskName(), taskSchedulerEntity.getTaskType())
.withSchedule(cronScheduleBuilder).build();
// 创建 SchedulerFactory 对象
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
// 获取 Scheduler 对象
try {
Scheduler scheduler = schedulerFactory.getScheduler();
// 设置 JobDetl 和 Trigger
scheduler.scheduleJob(jobDetl, cronTrigger);
// 启动调度器
scheduler.start();
// 修改任务状态为正常
taskSchedulerEntity.setState(TaskStateEnum.START.getCode());
taskSchedulerDao.updateById(taskSchedulerEntity);
} catch (Exception e) {
// 修改任务状态为异常
taskSchedulerEntity.setState(TaskStateEnum.ERROR.getCode());
taskSchedulerDao.updateById(taskSchedulerEntity);
throw new RuntimeException();
}
}
@Override
public void stop(Long taskId) {
TaskSchedulerEntity taskSchedulerEntity = taskSchedulerDao.selectById(taskId);
if (taskSchedulerEntity == null) {
throw new RuntimeException();
}
// 创建 SchedulerFactory 对象
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
try {
Scheduler scheduler = schedulerFactory.getScheduler();
JobKey jobKey = new JobKey(taskSchedulerEntity.getTaskName(), taskSchedulerEntity.getTaskType());
scheduler.deleteJob(jobKey);
// 修改任务状态为停止
taskSchedulerEntity.setState(TaskStateEnum.STOP.getCode());
taskSchedulerDao.updateById(taskSchedulerEntity);
} catch (SchedulerException e) {
// 修改任务状态为异常
taskSchedulerEntity.setState(TaskStateEnum.ERROR.getCode());
taskSchedulerDao.updateById(taskSchedulerEntity);
throw new RuntimeException();
}
}
}
“`
2.任务执行类的核心代码:
“`java
public class DynamicJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
JobDataMap dataMap = context.getJobDetl().getJobDataMap();
String jobParam = (String) dataMap.get(“jobParam”);
// 正常的业务处理
System.out.println(“执行动态定时任务,任务参数:” + jobParam);
}
}
“`
四、
Java定时任务的管理方式多种多样,但频繁的维护、调整和控制任务数量等问题仍然存在。数据库方式管理Java定时任务能够有效地解决这些问题,并且可以更好地满足业务的需求。显然,在生产环境中使用这种方式管理任务可以更大程度实现任务优化,也可以根据自己需求定制更适合自己业务的方式。但是,开发人员在使用此方式管理定时任务时,需要仔细考虑任务的相关需求,进行代码的拆分和调整,才能更好地实现任务的功能,提高定时任务管理的效率。
成都网站建设公司-创新互联为您提供网站建设、网站制作、网页设计及定制高端网站建设服务!
哥们 java有一个 Quartz 这个开源框架 网上资源挺多的,我就不在这给你复制了。这个是专门定时调用某一程序的,我觉得挺好用。你可以看看。有事hi我
哦,看来你那模块应该简单吧,Quartz挺好用的。那给你段timer的代码吧
Timer taskTimer = new Timer(true);//java自带定时执行的类
taskTimer.schedule(new TimerTask()
{
public void run()
{
//这里是你要处理逻辑的地方
}
}, 0, 1000*60);
//后面0是执行任务前的延迟时间,单位是毫秒。
//1000*60是执行各后续任务之间的时间间隔,单位是毫秒。 也就是多长时间执行一次。
public A extends Thread{
public void run(){
while(true){
Calendar cal=Calendar.getInstance();
int a=cal.get(Calendar.SECOND);
// 每隔五秒一次,具体你自己可以修改了
if(a%5==0){
//你要执行的代码
}
try{
Thread.sleep(100);
}catch(Exception e){System.err.println(e);}
}
}
}
基本原理就是通过一个线程,不断地判断是否到点,到了的话就执行相应的代码
java里面有个定时任务(java.util.TimerTask)!
spring也封装了一个很好的定时任务!
“* * ?”
具体可以谷歌!
希望对你有帮助!
JAVA有个timer吧 如果业务可以放到数据上的话,用数据库的定时作业做也行
之一种方法是写一个枣明线程,每秒运行一次,检测当羡枝前系统时间,如果是0时0分0秒,那么就把count设为1
第二种方法是用quartz框架,进行调度,调度规则是每天0点整运行一次,运行的内凳派告容就是把count设为1
关于java定时任务数据库方式的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
香港服务器选创新互联,香港虚拟主机被称为香港虚拟空间/香港网站空间,或者简称香港主机/香港空间。香港虚拟主机特点是免备案空间开通就用, 创新互联香港主机精选cn2+bgp线路访问快、稳定!
网站题目:Java定时任务——数据库方式管理(java定时任务数据库方式)
文章起源:http://www.shufengxianlan.com/qtweb/news46/149496.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联