您的位置:首页 > 其它

在weblogic中设置启动时自动定时执行的任务 分享

2012-09-03 17:33 561 查看
一.Timer与TimerTask组合起来用于实现定时执行任务的功能

  1.TimerTask:定义要执行的任务,你需要自己定义一个继承自该类的子类,并把要执行的任务实现在run接口中,如下所示:

  import java.util.*;

  

  public class MyTask extends TimerTask

  {

   public void run()

   {

  //你的任务

   System.out.println( "Running the task" );

   }

  }.

  实际上TimerTask实现了java.lang.Runnable 接口

  2.Timer:通过schedule方法定时调用TimerTask设定的任务

   包含方法:

   (1).Timer()

   以常规方式运行task

   (2).Timer(boolean)

   true时表示使用后台线程。只要剩下的程序继续运行,后台线程就会执行。

   (3).public void cancel()

   终止Timer的功能执行,但不会对正在执行的任务有影响。当执行cancel方法后将不能再用其分配任务。

   (4).public void schedule(TimerTask task,Date time)

   task被安排在time指定的时间执行,如果时间为过去时则任务立刻执行。

   (5).public void schedule(TimerTask task, Date firstTime, long period)

   task被安排在time指定的时间执行,执行后将每隔period(毫秒)反复执行。

   (6).public void schedule(TimerTask task, long delay)

   task被安排在delay(毫秒)指定的时间后执行。

   (7).public void schedule(TimerTask task,long delay, long period)

   task被安排在delay(毫秒)指定的时间后执行。执行后将每隔period(毫秒)反复执行。 (8).public void scheduleAtFixedRate(TimerTask task,Date firstTime, long period)

   task被安排在firstTime指定的时间执行。执行后将每隔period(毫秒)反复执行。根据该任务第一次执行的时间来指定反复执行时延长的时间段。如果一个任务被延时了,被安排在后面执行的任务就被相应的缩短等待时间以“接上”被延时的任务

   (9).public void scheduleAtFixedRate(TimerTask task,long delay,long period)

   task被安排在delay(毫秒)指定的时间后执行。执行后将每隔period(毫秒)反复执行。同上。

  注意每个 Timer 对象在同一时间只能执行一个任务

  以下是一个例子:

  

  import java.util.*;

  import java.io.*;

  

  

  public class doTask extends TimerTask {

   String index;

   Timer myTimer = new Timer();

   public doTask(String index) {

   this.index = index;

   }

  

   public void run() {

   System.out.println(index);

   }

  

   public static void main(String args[]) {

   doTask myTask1 = new doTask("First task");

   myTask1.start(0,3);

   doTask myTask2 = new doTask("Second task");

   myTask2.start(0,1);

  

   try{

   Thread.sleep(6000);

   }

   catch(InterruptedException e){

   }

  

   myTask1.end();

   myTask2.end();//程序结束时用cancel()结束Timer

  

   }

  

   public void start(int delay, int internal) {

   myTimer.schedule(this, delay * 1000, internal * 1000); //利用timer.schedule方法

   }

   public void end(){

   myTimer.cancel();

   }

  }

  

  输出:

  First task

  Second task

  Second task

  Second task

  First task

  Second task

  Second task

  Second task

  

  

  二.要使该class能在weblogic启动后自动执行,需要一个实现T3StartupDef接口的class

  import java.util.Hashtable;

  import weblogic.common.T3StartupDef;

  import weblogic.common.T3ServicesDef;

  public class startuptest implements T3StartupDef {

  

  public void setServices(T3ServicesDef services) {}

  

  public String startup(String name, Hashtable args) throws Exception {

   doTask.main();

  

  return "Startup completed successfully";

  }

  }

  在weblogic中添加该任务以便在weblogic启动后自动执行,启动weblogic,在Console 左边的mydomain—> Deployment—>Startup & Shutdown里点击“Configure a new Startup Class...”

  Name随便填,ClassName填PackageName.ClassName(该class必须实现startup接口)

  Deployment Order:指定Startup class的启动顺序,当存在多个Startup class时Order小的先执行

  Create就可以了,如果运行时提示class找不到,那需要在commEnv.cmd文件的WEBLOGIC_CLASSPATH中追加该class的路径
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: