Java多線程定時器任務

Java定時器任務---基於多線程實現的。


import com.carapi.services.inspect.InspectService;
import com.util.timer.TImer;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
public class TImerUtil {

        Logger logger = Logger.getLogger(TImerUtil.class);

    private Timer timer;

    private TImer abcTask;

    public void setAbcTask(TImer abcTask) {
        this.abcTask = abcTask;
    }
    /**
     * 開始定時任務
    */
   public TImerUtil(String id,String mailCode){
       Date date = getDate();
       timer = new Timer();
       timer.schedule(new TImer(timer,mailCode,id),date);
   }

    /**
     * 獲取定時任日期
    * @return
     */
    public Date getDate(){
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY,17);
        calendar.set(Calendar.MINUTE, 43);
        calendar.set(Calendar.SECOND, 00);
        return calendar.getTime();
    }
}


 
定時器任務,在這裏輸入定時器開始時間,和Timer定時器所需參數

//import com.carapi.services.inspect.InspectService;
//import com.model.inspect.TCarInspect;
//import org.apache.log4j.Logger;
//
import java.io.*;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
class TImer extends TimerTask {
   Logger logger = Logger.getLogger(TImerUtil.class);
   private Timer timer;
   private String id;
   private String mailCode;


    public TImer(Timer timer,String mailCode,String id){
        this.timer = timer;
        this.id = id;
        this.mailCode = mailCode;
   }

    public void run() {

InspectService    inspectService = (InspectService)ApplicationContextUtil.getBean("inspectService");
        logger.info("郵遞已送到,定時任務結束");
        timer.cancel();
            }        

        }

這裏主要行業務代碼,當定時器任務結束執行cancel任務,該定時器就永遠不會運行,但是我在寫的時候運行一個問題,就是執行@Servive層的對象時,不能回去@Service對象,因爲在@Service的對象在Spring管理中,其他對象沒有調用的權限,我用到是一個ApplicationContextAware這個類實現ApplicationContextAware的Bean,在String啓動的時候所以Bean被初始後,將會被注入ApplicationContext的實例,inspectService是類名開頭是 小寫,因爲類名在Sring裏面name名就是小寫


import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class ApplicationContextUtil implements ApplicationContextAware {


   private static ApplicationContext applicationContext;

    public static ApplicationContext getApplicationContext() {

        return applicationContext;

    }
    public void setApplicationContext(ApplicationContext applicationContext) {

        ApplicationContextUtil.applicationContext = applicationContext;

    }
    public static Object getBean(String beanName) {

        return applicationContext.getBean(beanName);
    }
}

 

 

 <!--<bean id ="ApplicationContextUtil" class ="com.util.ApplicationContextUtil" ></bean >--> 在Spring初始化中加入這個路徑鏈接纔可以讓Spring初始化Bean時纔會注入ApplicationContextUtil累中

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章