当Tomcat重启之后,如何让Spring 重新启动任务呢?其中使用的quartz任务调度框架。
最后更新时间: 2019-01-04 10:34:50
创建一个SchedulerInitListener监听器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
public class SchedulerInitListener implements ApplicationListener<ContextRefreshedEvent>{ // 在任务表中,加入状态字段,其中值为 Y 或 N private static final String STATUS_USABLE = "Y"; // 拼接要执行的类 private static final String PACKAGE = "com.flyme.job."; private static final Logger log = LoggerFactory.getLogger(SchedulerInitListener.class); @Autowired private IAuditScheduleJobService auditScheduleService; /** * @param jobName 任务名 * @param jobGroupName 任务组名 * @param triggerName 触发器名 * @param triggerGroupName 触发器组名 * @param jobClass class * @param cron 时间设置 */ @Override public void onApplicationEvent(ContextRefreshedEvent event) { //只执行一次 if(event.getApplicationContext().getParent() ==null){ List<Map<String, Object>> // 进行查询数据库,返回list对象 scheduleList=auditScheduleService.queryAuditSchedule(); if(scheduleList.size()>0){ for(Map<String, Object> map:scheduleList){ //启动所有可用的定时调度任务 if(STATUS_USABLE.equals(map.get("STATUS"))){ try { //反射获取指定要运作的class Class<String> schedulerClass=(Class<String>) Class.forName(PACKAGE+(String)map.get("JOB_CLASS")); SchedulerManager.addJob((String)map.get("JOB_NAME"), (String)map.get("JOB_GROUP_NAME"), (String)map.get("TRIGGER_NAME"), (String)map.get("TRIGGER_GROUP_NAME"), schedulerClass, (String)map.get("CRON")); } catch (Exception e) { log.error("任务:"+(String)map.get("JOB_NAME")+"启动失败,失败原因是:"+e.getMessage(),e); } } } } } } }
在applicationContext-dao.xml中加入SchedulerInitListener监听器bean对象
1 2
<!-- 当Spring容器启动完成后执行下面的这个Bean --> <bean class="com.flyme.listener.SchedulerInitListener"></bean>
近期评论