您好,登錄后才能下訂單哦!
小編給大家分享一下基于Springboot執行多個定時任務并動態獲取定時任務信息的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
簡介
因為一些業務的需要所有需要使用多個不同的定時任務,并且每個定時任務中的定時信息是通過數據庫動態獲取的。下面是我寫的使用了Springboot+Mybatis寫的多任務定時器。
主要實現了以下功能:
1、同時使用多個定時任務
2、動態獲取定時任務的定時信息
說明
因為我們需要從數據庫動態的獲取定時任務的信息,所以我們需要集成 SchedulingConfigurer 然后重寫 configureTasks 方法即可,調用不同的定時任務只需要通過service方法調用不用的實現返回對應的定時任務信息。有多少個定時任務就重寫多少個該方法(最好創建不同的類)。然后直接在application中啟動即可。
SpringApplication-啟動類
package test; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.transaction.annotation.EnableTransactionManagement; @SpringBootApplication @EnableTransactionManagement @EnableScheduling @ComponentScan(value = {"test.*"}) @MapperScan("test.mapper.*") public class TomcatlogApplication { public static void main(String[] args) { SpringApplication.run(TomcatlogApplication.class, args); } }
動態獲取定時任務信息
mapper
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import java.util.List; /* * @version 1.0 created by liuxuewen on 2018/8/21 14:39 */ public interface TomcatlogMapper { @Select("SELECT * FROM scheduledtask s WHERE s.`enable` = 1") String queryScheduledTask(); }
service
package test.service; import java.util.ArrayList; import java.util.List; /* * @version 1.0 created by liuxuewen on 2018/8/21 14:44 */ public interface TomcatlogService { List<ScheduledtaskEntity> queryScheduledTask(); }
service impl
import test.mapper.tomcatlog.TomcatlogMapper; import test.service.TomcatlogService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; /* * @version 1.0 created by liuxuewen on 2018/8/21 14:44 */ @Service public class TomcatlogServiceImpl implements TomcatlogService { private static final Logger LOGGER = LoggerFactory.getLogger(TomcatlogServiceImpl.class); @Autowired TomcatlogMapper tomcatlogMapper; @Override public String queryScheduledTask() { try { String res = tomcatlogMapper.queryScheduledTask(); return res; } catch (Exception e) { LOGGER.info(e); } return null; }
定時任務
package test.schedultask; import test.controller.MainController; import test.service.ControllerService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.SchedulingConfigurer; import org.springframework.scheduling.config.ScheduledTaskRegistrar; import org.springframework.scheduling.support.CronTrigger; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; /* * @version 1.0 created by liuxuewen on 2018/8/27 9:25 */ @Component public class ElasticsearchSchedultaskController implements SchedulingConfigurer { private static final Logger LOGGER = LoggerFactory.getLogger(ElasticsearchSchedultaskController.class); @Autowired private ControllerService controllerService; @Autowired private MainController mainController; @Override public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) { try { scheduledTaskRegistrar.addTriggerTask( //1.添加任務內容(Runnable),可以為方法 () -> Sytem.out.println("定時任務1"), //2.設置執行周期(Trigger) triggerContext -> { //2.1 從數據庫獲取執行周期,在這里調用不同的方法返回不同的定時任務信息 String cron = controllerService.getSchedultaskForElasticsearch(); System.out.println("controllerService.getSchedultaskForElasticsearch()"); System.out.println(cron); //2.2 合法性校驗. if (StringUtils.isEmpty(cron)) { // Omitted Code .. LOGGER.error("計劃任務為空"); } //2.3 返回執行周期(Date) return new CronTrigger(cron).nextExecutionTime(triggerContext); } ); }catch (Exception e){ String ex = exceptionLoggingUtil.exceptionPrint(e); LOGGER.info(ex); } } }
springboot一種全新的編程規范,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程,SpringBoot也是一個服務于框架的框架,服務范圍是簡化配置文件。
以上是“基于Springboot執行多個定時任務并動態獲取定時任務信息的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。