springBoot在啓動時執行任務如何實現?

在項目開發中會經常用到,在項目啓動時候執行某段特定的代碼,這時我們該如何實現呢?

在springBoot中提供了中簡單方法:實現CommandLineRunner接口,並重寫run()方法,並加上

@Component(將該類加入ioc容器中)

如果同時有多個類實現了CommandLineRunner接口可以通過@order接口來指定啓動的加載順序。

代碼例子如下:

@Component
@Order(value = 1)
public class SysExceptionQuartz implements CommandLineRunner {

    private static Logger logger = Logger.getLogger(SysExceptionQuartz.class);

    @Autowired
    private PortalDao portalDao;

    @Override
    public void run(String... args) throws Exception {
        logger.info("項目啓動時,查詢數據庫並創建新的定時任務");
        /*查詢出所有系統的生效時間與對應的狀態*/
        List<SysInfo> sysInfoList = portalDao.getSysInfo();
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//設置日期格式
        /*獲取系統當前時間*/
        Date currentTime = new Date();
        if (sysInfoList.size() > 0) {
            for (SysInfo s : sysInfoList) {
                if(StringUtil.isNil(s.getSysEffectTime())){
                    continue;
                }
                Date sysEffectTime = df.parse(s.getSysEffectTime());
                /*如果系統生效時間在當前時間之前直接去數據庫更新狀態*/
                if (sysEffectTime.after(currentTime)) {
                    Date sysEffectDate = DateUtil.string2Date(s.getSysEffectTime(), DateUtil.YYYYMMDDHHMMSS);
                    /*將時間轉化爲cron表達式*/
                    String cronTimeExpress = CronUtil.getCron(sysEffectDate);
                    Map<String,String> sysParamMap = new HashMap<>();
                    sysParamMap.put(s.getSysCode(),s.getEnable().toString());
                    /*移除已創建的job*/
                    SysQuartzManager.removeJob("Job"+s.getSysCode(),"Job_Group"+s.getSysCode(),
                            "Trigger"+s.getSysCode(),"Trigger_Group"+s.getSysCode());
                    /*添加一個定時任務*/
                    SysQuartzManager.addJob("Job"+s.getSysCode(),"Job_Group"+s.getSysCode(),
                            "Trigger"+s.getSysCode(),"Trigger_Group"+s.getSysCode(),cronTimeExpress,sysParamMap);
                }else {
                    if (!s.getEnable().equals("1")){
                        s.setEnable("1");
                        portalDao.makeSysEnable(s);
                    }
                }
            }
        }
    }
}

 

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