日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Java定時(shí)任務(wù)——數(shù)據(jù)庫(kù)方式管理(java定時(shí)任務(wù)數(shù)據(jù)庫(kù)方式)

近年來(lái),隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,大量的計(jì)算機(jī)軟件需要進(jìn)行定時(shí)任務(wù)的管理,來(lái)判斷是否有數(shù)據(jù)需要自動(dòng)提交處理等等。因此,定時(shí)任務(wù)已經(jīng)成為了Java程序員的必備技能。然而,隨著任務(wù)數(shù)量的增長(zhǎng),相應(yīng)的管理也變得越來(lái)越繁瑣,力求提高其效率和控制力的需求也變得日益迫切。因此,數(shù)據(jù)庫(kù)方式管理成為了一個(gè)很好的解決方案。本文旨在介紹Java定時(shí)任務(wù)的管理方式,著眼于數(shù)據(jù)庫(kù)方式管理的具體實(shí)踐。

成都一家集口碑和實(shí)力的網(wǎng)站建設(shè)服務(wù)商,擁有專業(yè)的企業(yè)建站團(tuán)隊(duì)和靠譜的建站技術(shù),10年企業(yè)及個(gè)人網(wǎng)站建設(shè)經(jīng)驗(yàn) ,為成都上1000+客戶提供網(wǎng)頁(yè)設(shè)計(jì)制作,網(wǎng)站開(kāi)發(fā),企業(yè)網(wǎng)站制作建設(shè)等服務(wù),包括成都營(yíng)銷型網(wǎng)站建設(shè),品牌網(wǎng)站制作,同時(shí)也為不同行業(yè)的客戶提供成都做網(wǎng)站、網(wǎng)站建設(shè)的服務(wù),包括成都電商型網(wǎng)站制作建設(shè),裝修行業(yè)網(wǎng)站制作建設(shè),傳統(tǒng)機(jī)械行業(yè)網(wǎng)站建設(shè),傳統(tǒng)農(nóng)業(yè)行業(yè)網(wǎng)站制作建設(shè)。在成都做網(wǎng)站,選網(wǎng)站制作建設(shè)服務(wù)商就選創(chuàng)新互聯(lián)。

一、Java定時(shí)任務(wù)的常見(jiàn)管理方式

1.使用Schedule類來(lái)管理任務(wù):Java官方提供了一個(gè)Schedule類,可以用于對(duì)任務(wù)的調(diào)度,該類提供了多個(gè)接口來(lái)實(shí)現(xiàn)任務(wù)的定時(shí)執(zhí)行,詳見(jiàn)https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ScheduledExecutorService.html。

2.使用Quartz框架管理任務(wù):Quartz是一個(gè)Java的任務(wù)調(diào)度框架,提供了強(qiáng)大的任務(wù)調(diào)度功能,支持集群、多線程調(diào)度。

3.使用Spring框架管理任務(wù):Spring框架是一個(gè)Java的應(yīng)用程序開(kāi)發(fā)框架,用于簡(jiǎn)化企業(yè)級(jí)應(yīng)用程序開(kāi)發(fā),包括任務(wù)調(diào)度、面向切面編程等等。

二、為什么要采用數(shù)據(jù)庫(kù)方式管理Java定時(shí)任務(wù)?

上述三種方式無(wú)論哪種,都有其自身的特點(diǎn)和優(yōu)劣勢(shì),但是這些方式均需要程序員進(jìn)行代碼實(shí)現(xiàn)和管理,一旦任務(wù)數(shù)量較多可能導(dǎo)致管理繁瑣,效率低下的問(wèn)題。同時(shí),Java應(yīng)用程序一旦停止運(yùn)行,所有的任務(wù)也會(huì)隨之中斷,需要重新開(kāi)始執(zhí)行,這樣很容易導(dǎo)致數(shù)據(jù)丟失,因此需要一個(gè)更為穩(wěn)定可靠的解決方案。次之,如果使用了第三方框架,需要對(duì)框架進(jìn)行熟悉,且場(chǎng)景過(guò)于簡(jiǎn)單的使用方式不一定能夠滿足復(fù)雜的使用場(chǎng)景。在此情況下,我們可以使用數(shù)據(jù)庫(kù)方式管理Java定時(shí)任務(wù)。

三、如何采用數(shù)據(jù)庫(kù)方式管理Java定時(shí)任務(wù)?

數(shù)據(jù)庫(kù)方式管理Java定時(shí)任務(wù),需要提前創(chuàng)建好Table,這個(gè)Table中需要包括以下幾個(gè)字段:ID,TASK_NAME,TASK_TYPE,TASK_PARAM,CRON_EXPRESSION,START_TIME,END_TIME,STATE。然后再將Table映射成Java對(duì)象。如下圖所示:

![image.png](https://cdn.nlark.com/yuque/0/2023/png/21884493/1659559992261-2a1718d7-2f2b-45b0-9236-8e6bb5728596.png)

任務(wù)定義表結(jié)構(gòu)

1.定時(shí)任務(wù)的核心代碼:

“`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();

}

// 創(chuàng)建 JobDetl 實(shí)例,并與 HelloJob 類綁定

JobDetl jobDetl = JobBuilder.newJob(DynamicJob.class)

.withIdentity(taskSchedulerEntity.getTaskName(), taskSchedulerEntity.getTaskType()).build();

jobDetl.getJobDataMap().put(“jobParam”, taskSchedulerEntity.getTaskParam());

// 創(chuàng)建 CronTrigger 對(duì)象,指定任務(wù)觸發(fā)的時(shí)間規(guī)則

CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(taskSchedulerEntity.getCronExpression());

CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(taskSchedulerEntity.getTaskName(), taskSchedulerEntity.getTaskType())

.withSchedule(cronScheduleBuilder).build();

// 創(chuàng)建 SchedulerFactory 對(duì)象

SchedulerFactory schedulerFactory = new StdSchedulerFactory();

// 獲取 Scheduler 對(duì)象

try {

Scheduler scheduler = schedulerFactory.getScheduler();

// 設(shè)置 JobDetl 和 Trigger

scheduler.scheduleJob(jobDetl, cronTrigger);

// 啟動(dòng)調(diào)度器

scheduler.start();

// 修改任務(wù)狀態(tài)為正常

taskSchedulerEntity.setState(TaskStateEnum.START.getCode());

taskSchedulerDao.updateById(taskSchedulerEntity);

} catch (Exception e) {

// 修改任務(wù)狀態(tài)為異常

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

}

// 創(chuàng)建 SchedulerFactory 對(duì)象

SchedulerFactory schedulerFactory = new StdSchedulerFactory();

try {

Scheduler scheduler = schedulerFactory.getScheduler();

JobKey jobKey = new JobKey(taskSchedulerEntity.getTaskName(), taskSchedulerEntity.getTaskType());

scheduler.deleteJob(jobKey);

// 修改任務(wù)狀態(tài)為停止

taskSchedulerEntity.setState(TaskStateEnum.STOP.getCode());

taskSchedulerDao.updateById(taskSchedulerEntity);

} catch (SchedulerException e) {

// 修改任務(wù)狀態(tài)為異常

taskSchedulerEntity.setState(TaskStateEnum.ERROR.getCode());

taskSchedulerDao.updateById(taskSchedulerEntity);

throw new RuntimeException();

}

}

}

“`

2.任務(wù)執(zhí)行類的核心代碼:

“`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”);

// 正常的業(yè)務(wù)處理

System.out.println(“執(zhí)行動(dòng)態(tài)定時(shí)任務(wù),任務(wù)參數(shù):” + jobParam);

}

}

“`

四、

Java定時(shí)任務(wù)的管理方式多種多樣,但頻繁的維護(hù)、調(diào)整和控制任務(wù)數(shù)量等問(wèn)題仍然存在。數(shù)據(jù)庫(kù)方式管理Java定時(shí)任務(wù)能夠有效地解決這些問(wèn)題,并且可以更好地滿足業(yè)務(wù)的需求。顯然,在生產(chǎn)環(huán)境中使用這種方式管理任務(wù)可以更大程度實(shí)現(xiàn)任務(wù)優(yōu)化,也可以根據(jù)自己需求定制更適合自己業(yè)務(wù)的方式。但是,開(kāi)發(fā)人員在使用此方式管理定時(shí)任務(wù)時(shí),需要仔細(xì)考慮任務(wù)的相關(guān)需求,進(jìn)行代碼的拆分和調(diào)整,才能更好地實(shí)現(xiàn)任務(wù)的功能,提高定時(shí)任務(wù)管理的效率。

成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!

Java中定時(shí)存儲(chǔ)數(shù)據(jù) 例如每隔5秒中存儲(chǔ)一次?;蛘呙刻斓?點(diǎn)存儲(chǔ)數(shù)據(jù)怎樣實(shí)現(xiàn)

哥們 java有一個(gè) Quartz 這個(gè)開(kāi)源框架 網(wǎng)上資源挺多的,我就不在這給你復(fù)制了。這個(gè)是專門定時(shí)調(diào)用某一程序的,我覺(jué)得挺好用。你可以看看。有事hi我

哦,看來(lái)你那模塊應(yīng)該簡(jiǎn)單吧,Quartz挺好用的。那給你段timer的代碼吧

Timer taskTimer = new Timer(true);//java自帶定時(shí)執(zhí)行的類

taskTimer.schedule(new TimerTask()

{

public void run()

{

//這里是你要處理邏輯的地方

}

}, 0, 1000*60);

//后面0是執(zhí)行任務(wù)前的延遲時(shí)間,單位是毫秒。

//1000*60是執(zhí)行各后續(xù)任務(wù)之間的時(shí)間間隔,單位是毫秒。 也就是多長(zhǎng)時(shí)間執(zhí)行一次。

public A extends Thread{

public void run(){

while(true){

Calendar cal=Calendar.getInstance();

int a=cal.get(Calendar.SECOND);

// 每隔五秒一次,具體你自己可以修改了

if(a%5==0){

//你要執(zhí)行的代碼

}

try{

Thread.sleep(100);

}catch(Exception e){System.err.println(e);}

}

}

}

基本原理就是通過(guò)一個(gè)線程,不斷地判斷是否到點(diǎn),到了的話就執(zhí)行相應(yīng)的代碼

java里面有個(gè)定時(shí)任務(wù)(java.util.TimerTask)!

spring也封裝了一個(gè)很好的定時(shí)任務(wù)!

“* * ?”

具體可以谷歌!

希望對(duì)你有幫助!

JAVA有個(gè)timer吧 如果業(yè)務(wù)可以放到數(shù)據(jù)上的話,用數(shù)據(jù)庫(kù)的定時(shí)作業(yè)做也行

關(guān)于java定時(shí)任務(wù)

之一種方法是寫(xiě)一個(gè)棗明線程,每秒運(yùn)行一次,檢測(cè)當(dāng)羨枝前系統(tǒng)時(shí)間,如果是0時(shí)0分0秒,那么就把count設(shè)為1

第二種方法是用quartz框架,進(jìn)行調(diào)度,調(diào)度規(guī)則是每天0點(diǎn)整運(yùn)行一次,運(yùn)行的內(nèi)凳派告容就是把count設(shè)為1

關(guān)于java定時(shí)任務(wù)數(shù)據(jù)庫(kù)方式的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

香港服務(wù)器選創(chuàng)新互聯(lián),香港虛擬主機(jī)被稱為香港虛擬空間/香港網(wǎng)站空間,或者簡(jiǎn)稱香港主機(jī)/香港空間。香港虛擬主機(jī)特點(diǎn)是免備案空間開(kāi)通就用, 創(chuàng)新互聯(lián)香港主機(jī)精選cn2+bgp線路訪問(wèn)快、穩(wěn)定!


本文標(biāo)題:Java定時(shí)任務(wù)——數(shù)據(jù)庫(kù)方式管理(java定時(shí)任務(wù)數(shù)據(jù)庫(kù)方式)
網(wǎng)址分享:http://www.dlmjj.cn/article/dhijhod.html