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

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

SpringBoot中怎么利用數(shù)據(jù)庫實(shí)現(xiàn)一個(gè)定時(shí)任務(wù)

SpringBoot中怎么利用數(shù)據(jù)庫實(shí)現(xiàn)一個(gè)定時(shí)任務(wù),很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊、虛擬空間、營銷軟件、網(wǎng)站建設(shè)、靈臺網(wǎng)站維護(hù)、網(wǎng)站推廣。

基于注解來創(chuàng)建定時(shí)任務(wù)非常簡單,只需幾行代碼便可完成。實(shí)現(xiàn)如下:

@Configuration@EnableSchedulingpublic class SimpleScheduleTask {   //10秒鐘執(zhí)行一次  @Scheduled(cron = "0/10 * * * * ?")  private void tasks() {    System.out.println("【定時(shí)任務(wù)】 每10秒執(zhí)行一次!");  }}

Cron表達(dá)式參數(shù)分別表示(從左到右):秒(0~59) 如0/5表示每5秒分(0~59)時(shí)(0~23)日(0~31) 月的某一天月(0~11)周幾( 可填1-7 或 SUN/MON/TUE/WED/THU/FRI/SAT)

就上面幾行代碼,就能搞定一個(gè)定時(shí)任務(wù)。顯然,使用Scheduled 確實(shí)特別的方便,但有很大的缺點(diǎn)和局限,就是當(dāng)我們調(diào)整了執(zhí)行計(jì)劃的時(shí)間時(shí),需要重啟服務(wù)才能生效,這就有些不方便。為了達(dá)到實(shí)時(shí)生效的效果,可以通過數(shù)據(jù)庫來動態(tài)實(shí)現(xiàn)定時(shí)任務(wù)。

基于數(shù)據(jù)庫的動態(tài)定時(shí)任務(wù)實(shí)現(xiàn)

將定時(shí)任務(wù)配置在數(shù)據(jù)庫,啟動項(xiàng)目的時(shí)候,用mybatis讀取數(shù)據(jù)庫,實(shí)例化對象,并設(shè)定定時(shí)任務(wù)。如果需要新增,減少,修改定時(shí)任務(wù),僅需要修改數(shù)據(jù)庫資料,并重啟項(xiàng)目即可,無需改代碼。

@Lazy(value = false)@Componentpublic class ScheduleTask implements SchedulingConfigurer {   protected static Logger logger = LoggerFactory.getLogger(ScheduleTask.class);  private SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   @Autowired  private ScheduleTaskMapper scheduleTaskMapper;   @Override  public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {    List tasks = getAllScheduleTasks();    logger.info("【定時(shí)任務(wù)啟動】 啟動任務(wù)數(shù):"+tasks.size()+"; time="+sdf.format(new Date()));     //校驗(yàn)數(shù)據(jù)    checkDataList(tasks);    //通過校驗(yàn)的數(shù)據(jù)執(zhí)行定時(shí)任務(wù)    int count = 0;    if(tasks.size()>0) {      for (int i = 0; i < tasks.size(); i++) {        try {          taskRegistrar.addTriggerTask(getRunnable(tasks.get(i)), getTrigger(tasks.get(i)));          count++;        } catch (Exception e) {          logger.error("task start error:" + tasks.get(i).getClassName() + ";" + tasks.get(i).getMethodName() + ";" + e.getMessage());        }      }    }    logger.info("started task number="+count+"; time="+sdf.format(new Date()));  };  /** * 獲取要執(zhí)行的所有任務(wù) * @return */  private List getAllScheduleTasks() {    ScheduleTaskExample example=new ScheduleTaskExample();    example.createCriteria().andIsDeleteEqualTo((byte) 0);    return scheduleTaskMapper.selectByExample(example);  }   /** * 獲取Runnable * * @param task * @return */  private Runnable getRunnable(ScheduleTask task){    return new Runnable() {      @Override      public void run() {        try {          Object obj = SpringUtil.getBean(task.getClassName());          Method method = obj.getClass().getMethod(task.getMethodName(),null);          method.invoke(obj);        } catch (InvocationTargetException e) {          logger.error("refect exception:"+task.getClassName()+";"+task.getMethodName()+";"+ e.getMessage());        } catch (Exception e) {          logger.error(e.getMessage());        }      }    };  }  /** * 獲取Trigger * * @param task * @return */  private Trigger getTrigger(ScheduleTask task){    return new Trigger() {      @Override      public Date nextExecutionTime(TriggerContext triggerContext) {        //將Cron 0/1 * * * * ?        CronTrigger trigger = new CronTrigger(task.getCron());        Date nextExec = trigger.nextExecutionTime(triggerContext);        return nextExec;      }    };  }   /** * 校驗(yàn)數(shù)據(jù) * * @param list * @return */  private List checkDataList(List list) {    String msg="";    for(int i=0;i

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)的支持。


當(dāng)前名稱:SpringBoot中怎么利用數(shù)據(jù)庫實(shí)現(xiàn)一個(gè)定時(shí)任務(wù)
標(biāo)題網(wǎng)址:http://weahome.cn/article/poccpi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部