java代碼建立job,編寫java代碼

java的幾種定時(shí)任務(wù)

java定時(shí)任務(wù)有三種:

創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司,專注網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、網(wǎng)站營銷推廣,國際域名空間,網(wǎng)頁空間,網(wǎng)站托管、服務(wù)器租用有關(guān)企業(yè)網(wǎng)站制作方案、改版、費(fèi)用等問題,請聯(lián)系創(chuàng)新互聯(lián)。

- JDK自帶 :JDK自帶的Timer以及JDK1.5+ 新增的ScheduledExecutorService;

- Quartz ? ?:簡單卻強(qiáng)大的JAVA作業(yè)調(diào)度框架

- Spring3.0以后自帶的task :可以將它看成一個輕量級的Quartz,而且使用起來比Quartz簡單許多;

代碼參考:

JDK 自帶的定時(shí)器實(shí)現(xiàn)

schedule(TimerTask task, Date time) 特定時(shí)間執(zhí)行

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 定時(shí)器實(shí)現(xiàn)

2.1? 通過maven引入依賴(這里主要介紹2.3.0) ?注意:shiro-scheduler中依賴的是1.x版本 ?如果同時(shí)使用會沖突

!-- --

dependency

groupIdorg.quartz-scheduler/groupId

artifactIdquartz/artifactId

version2.3.0/version

/dependency

2.2?創(chuàng)建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?調(diào)度任務(wù)

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

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

// 開始

scheduler.start();

// job 唯一標(biāo)識 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")

// 延遲一秒執(zhí)行

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

// 每隔一秒執(zhí)行 并一直重復(fù)

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

.build();

scheduler.scheduleJob(jobDetail , trigger);

Thread.sleep(5000);

// 刪除job

scheduler.deleteJob(jobKey);

}

3.Spring 相關(guān)的任務(wù)調(diào)度

3.1 配置文件實(shí)現(xiàn)

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注解實(shí)現(xiàn)

spring-schedule.xml

task:scheduler id="myScheduler" pool-size="10" /

// 啟用注解

task:annotation-driven scheduler="myScheduler"/

@Component?

public class Task{ ? ?

@Scheduled(cron="0/5 * *? * * ? ")?? //每5秒執(zhí)行一次

public void execute(){ ?

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

System.out.println(sdf.format(DateTime.now().toDate())+"*********B任務(wù)每5秒執(zhí)行一次進(jìn)入測試"); ? ?

}?????

}

如何用java創(chuàng)建或修改oracle job的方法問題

不要直接用java來操作修改 job。而是要寫一個存儲過程來修改 job。然后通過 java 調(diào)用存儲過程,并把時(shí)間參數(shù)傳入到存儲過程中,這樣就可以搞定了

java中如何實(shí)現(xiàn)Job Scheduing

例如:

/**

* @author kevin zhou

*

* 在Java中實(shí)現(xiàn)Job Scheduling

* 創(chuàng)建日期 2004-7-13

*/

import java.util.TimerTask;

import java.util.Calendar;

import java.util.Date;

import java.util.Timer;

public class ReportGenerator extends TimerTask{

/* (非 Javadoc)

* @see java.util.TimerTask#run()

*/

public void run() {

? ?System.out.println("Generating report");

}

}

class MainApplication {

public static void main(String[] args) {

Timer timer=new Timer();

Calendar date = Calendar.getInstance();

date.set(

?Calendar.DAY_OF_WEEK,

?Calendar.SUNDAY

);

date.set(Calendar.HOUR, 0);

date.set(Calendar.MINUTE, 0);

date.set(Calendar.SECOND, 0);

date.set(Calendar.MILLISECOND, 0);

// Schedule to run every Sunday in midnight

timer.schedule(

?new ReportGenerator(),

?date.getTime(),

?1000 * 60 * 60 * 24 * 7

);

}

}

此處簡單解釋一下,在此例子中ReportGenerator繼承java.util.TimerTask,它又繼承了java.lang.Runnable,我們需要覆蓋run()方法。

調(diào)用時(shí)用schedule()方法讓它每周日0點(diǎn)0分執(zhí)行,避開服務(wù)器高峰,實(shí)現(xiàn)Job Scheduling的目的。

補(bǔ)充:Java是一種可以撰寫跨平臺應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言。Java 技術(shù)具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應(yīng)用于PC、數(shù)據(jù)中心、游戲控制臺、科學(xué)超級計(jì)算機(jī)、移動電話和互聯(lián)網(wǎng),同時(shí)擁有全球最大的開發(fā)者專業(yè)社群。

java quartz job 執(zhí)行時(shí)間配置

第一步:引包

要使用Quartz,必須要引入以下這幾個包:

1、log4j-1.2.16

2、quartz-2.1.7

3、slf4j-api-1.6.1.jar

4、slf4j-log4j12-1.6.1.jar

這些包都在下載的Quartz包里面包含著,因此沒有必要為尋找這幾個包而頭疼。

第二步:創(chuàng)建要被定執(zhí)行的任務(wù)類

這一步也很簡單,只需要創(chuàng)建一個實(shí)現(xiàn)了org.quartz.Job接口的類,并實(shí)現(xiàn)這個接口的唯一一個方法execute(JobExecutionContext arg0) throws JobExecutionException即可。如:

import java.text.SimpleDateFormat;

import java.util.Date;

import org.quartz.Job;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

public class myJob implements Job {

@Override

public void execute(JobExecutionContext arg0) throws JobExecutionException {

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");

System.out.println(sdf.format(new Date()));

}

}

import java.text.SimpleDateFormat;

import java.util.Date;

import org.quartz.Job;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

public class myJob implements Job {

@Override

public void execute(JobExecutionContext arg0) throws JobExecutionException {

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");

System.out.println(sdf.format(new Date()));

}

}

這個例子很簡單,就不用解說了。

第三步:創(chuàng)建任務(wù)調(diào)度,并執(zhí)行

這一步應(yīng)該算是最難的一步的,但其實(shí)是非常簡單的,直接上代碼

import static org.quartz.CronScheduleBuilder.cronSchedule;

import static org.quartz.JobBuilder.newJob;

import static org.quartz.TriggerBuilder.newTrigger;

import java.text.SimpleDateFormat;

import java.util.Date;

import org.quartz.CronTrigger;

import org.quartz.JobDetail;

import org.quartz.Scheduler;

import org.quartz.SchedulerFactory;

import org.quartz.impl.StdSchedulerFactory;

public class Test {

public void go() throws Exception {

// 首先,必需要取得一個Scheduler的引用

SchedulerFactory sf = new StdSchedulerFactory();

Scheduler sched = sf.getScheduler();

//jobs可以在scheduled的sched.start()方法前被調(diào)用

//job 1將每隔20秒執(zhí)行一次

JobDetail job = newJob(myJob.class).withIdentity("job1", "group1").build();

CronTrigger trigger = newTrigger().withIdentity("trigger1", "group1").withSchedule(cronSchedule("0/20 * * * * ?")).build();

Date ft = sched.scheduleJob(job, trigger);

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");

System.out.println(job.getKey() + " 已被安排執(zhí)行于: " + sdf.format(ft) + ",并且以如下重復(fù)規(guī)則重復(fù)執(zhí)行: " + trigger.getCronExpression());

// job 2將每2分鐘執(zhí)行一次(在該分鐘的第15秒)

job = newJob(myJob.class).withIdentity("job2", "group1").build();

trigger = newTrigger().withIdentity("trigger2", "group1").withSchedule(cronSchedule("15 0/2 * * * ?")).build();

ft = sched.scheduleJob(job, trigger);

System.out.println(job.getKey() + " 已被安排執(zhí)行于: " + sdf.format(ft) + ",并且以如下重復(fù)規(guī)則重復(fù)執(zhí)行: "+ trigger.getCronExpression());

// 開始執(zhí)行,start()方法被調(diào)用后,計(jì)時(shí)器就開始工作,計(jì)時(shí)調(diào)度中允許放入N個Job

sched.start();

try {

//主線程等待一分鐘

Thread.sleep(60L * 1000L);

} catch (Exception e) {}

//關(guān)閉定時(shí)調(diào)度,定時(shí)器不再工作

sched.shutdown(true);

}

public static void main(String[] args) throws Exception {

Test test = new Test();

test.go();

}

}

import static org.quartz.CronScheduleBuilder.cronSchedule;

import static org.quartz.JobBuilder.newJob;

import static org.quartz.TriggerBuilder.newTrigger;

import java.text.SimpleDateFormat;

import java.util.Date;

import org.quartz.CronTrigger;

import org.quartz.JobDetail;

import org.quartz.Scheduler;

import org.quartz.SchedulerFactory;

import org.quartz.impl.StdSchedulerFactory;

public class Test {

public void go() throws Exception {

// 首先,必需要取得一個Scheduler的引用

SchedulerFactory sf = new StdSchedulerFactory();

Scheduler sched = sf.getScheduler();

//jobs可以在scheduled的sched.start()方法前被調(diào)用

//job 1將每隔20秒執(zhí)行一次

JobDetail job = newJob(myJob.class).withIdentity("job1", "group1").build();

CronTrigger trigger = newTrigger().withIdentity("trigger1", "group1").withSchedule(cronSchedule("0/20 * * * * ?")).build();

Date ft = sched.scheduleJob(job, trigger);

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");

System.out.println(job.getKey() + " 已被安排執(zhí)行于: " + sdf.format(ft) + ",并且以如下重復(fù)規(guī)則重復(fù)執(zhí)行: " + trigger.getCronExpression());

// job 2將每2分鐘執(zhí)行一次(在該分鐘的第15秒)

job = newJob(myJob.class).withIdentity("job2", "group1").build();

trigger = newTrigger().withIdentity("trigger2", "group1").withSchedule(cronSchedule("15 0/2 * * * ?")).build();

ft = sched.scheduleJob(job, trigger);

System.out.println(job.getKey() + " 已被安排執(zhí)行于: " + sdf.format(ft) + ",并且以如下重復(fù)規(guī)則重復(fù)執(zhí)行: "+ trigger.getCronExpression());

// 開始執(zhí)行,start()方法被調(diào)用后,計(jì)時(shí)器就開始工作,計(jì)時(shí)調(diào)度中允許放入N個Job

sched.start();

try {

//主線程等待一分鐘

Thread.sleep(60L * 1000L);

} catch (Exception e) {}

//關(guān)閉定時(shí)調(diào)度,定時(shí)器不再工作

sched.shutdown(true);

}

public static void main(String[] args) throws Exception {

Test test = new Test();

test.go();

}

}

OK了,Job1和Job2就會被安排為定時(shí)執(zhí)行了。此時(shí)程序是可以執(zhí)行的了,但是可能會輸出WARN級別日志,這是因?yàn)闆]有加log4j的配置文件,加上配置文件,就OK了。這里需要說明的地方只有一個,其它的可以直接Copy到您的項(xiàng)目里面??创a:

CronTrigger trigger = newTrigger().withIdentity("trigger1", "group1").withSchedule(cronSchedule("0/20 * * * * ?")).build();

CronTrigger trigger = newTrigger().withIdentity("trigger1", "group1").withSchedule(cronSchedule("0/20 * * * * ?")).build();

Java的軟件怎么寫一個job,每天晚上十二點(diǎn)自動調(diào)用某存儲過程?是寫在xml里還是寫個java?

如果用java的類Time定時(shí)器,就是寫在java文件里

如果是用spring的定時(shí)任務(wù),就是寫在xml里

文章題目:java代碼建立job,編寫java代碼
文章地址:http://muchs.cn/article36/phggsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、動態(tài)網(wǎng)站外貿(mào)網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)、用戶體驗(yàn)、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化