1. 程式人生 > >系統定時器

系統定時器

 1.在dispatcher.xml或者Spring-mvc.xml檔案中加上

<bean id="TaskTimer" class="com.scheduler.util.TimedTaskListener"></bean>
作用是對類進行裝載


2.建立定時任務類:

public class TimedTaskListener extends TimerTask implements ApplicationListener<ContextRefreshedEvent> {

    private static Date polling_start_time = null;   //輪詢開始時間
    private static Long polling_interval_time = 0L;    //輪詢間隔時間

    private  static SimpleDateFormat yMd = new SimpleDateFormat("yyyy-MM-dd");
    private  static SimpleDateFormat yMdHms = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    private static AccountService accountService;
    private static UserDataCatalogTableService userDataCatalogTableService;

    private static LicenseService licenseService;//許可證訪問

    private String licensePath = getClass().getResource("/").getFile().toString()+ Messages.getString("license_file_path")+"/valid.license";
    private String licenseLogPath = getClass().getResource("/").getFile().toString()+"licenselog.txt";

    //需要執行的邏輯程式碼,當spring容器初始化完成後就會執行該方法。
    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        accountService = event.getApplicationContext().getBean(AccountService.class);
        userDataCatalogTableService = event.getApplicationContext().getBean(UserDataCatalogTableService.class);
        licenseService = event.getApplicationContext().getBean(LicenseService.class);

        //啟動的時候先判斷一次license是否過期
        if(Constant.LICENSE_IS_NEED.equals(Constant.LICENSE_YES)) {//判斷是否需要處理
            //先判斷是否是第一次啟動,如果是則先建立license
            licenseService.licenseCreateByFirst(licensePath,licenseLogPath);
            licenseService.pollLicense(licensePath, licenseLogPath);//判斷license
        }


        try {
            //輪詢開始時間初始化
            polling_start_time = yMdHms.parse(yMd.format(new Date())+" "+Messages.getString("polling_start_time"));
            if(polling_start_time.getTime() < new Date().getTime()){    //如果輪詢開始時間小於專案啟動時間
                polling_start_time = TimeHelper.dateAddDay(polling_start_time,1);//則將輪詢時間推遲一天
            }
            polling_interval_time = Long.parseLong(Messages.getString("polling_interval_time"));//輪詢間隔時間
        } catch (ParseException e) {
            e.printStackTrace();
        }
        //定時器執行
        new Timer().schedule(new TimedTaskListener(),polling_start_time,polling_interval_time);

    }

    @Override
    public void run() {

        System.out.println("輪詢處理,當前時間為:"+yMdHms.format(new Date()).toString());

        accountService.checkAndDealAllUserDeadline();   //檢查並處理所有過期使用者
        userDataCatalogTableService.checkAndDealUserTableDeadline();//檢查並處理所有過期表

    }
}