真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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)用等問題,請(qǐng)聯(lián)系創(chuàng)新互聯(lián)

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

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

- Spring3.0以后自帶的task :可以將它看成一個(gè)輕量級(jí)的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í)使用會(huì)沖突

!-- --

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)識(shí) 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。而是要寫一個(gè)存儲(chǔ)過程來修改 job。然后通過 java 調(diào)用存儲(chǔ)過程,并把時(shí)間參數(shù)傳入到存儲(chǔ)過程中,這樣就可以搞定了

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

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

第一步:引包

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

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包里面包含著,因此沒有必要為尋找這幾個(gè)包而頭疼。

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

這一步也很簡單,只需要?jiǎng)?chuàng)建一個(gè)實(shí)現(xiàn)了org.quartz.Job接口的類,并實(shí)現(xiàn)這個(gè)接口的唯一一個(gè)方法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()));

}

}

這個(gè)例子很簡單,就不用解說了。

第三步:創(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 {

// 首先,必需要取得一個(gè)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個(gè)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 {

// 首先,必需要取得一個(gè)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個(gè)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就會(huì)被安排為定時(shí)執(zhí)行了。此時(shí)程序是可以執(zhí)行的了,但是可能會(huì)輸出WARN級(jí)別日志,這是因?yàn)闆]有加log4j的配置文件,加上配置文件,就OK了。這里需要說明的地方只有一個(gè),其它的可以直接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的軟件怎么寫一個(gè)job,每天晚上十二點(diǎn)自動(dòng)調(diào)用某存儲(chǔ)過程?是寫在xml里還是寫個(gè)java?

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

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


文章標(biāo)題:java代碼建立job,編寫java代碼
地址分享:http://weahome.cn/article/phggsg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部