spring-boot集成Quartz并抽取时间为配置文件

先定义一个ApplicationgWareUtils

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@Component
public class ApplicationContextAwareUtil implements ApplicationContextAware {
	
	private static ApplicationContext context;

	@Override
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
		// TODO Auto-generated method stub
		ApplicationContextAwareUtil.context = applicationContext;
	}
	
	public static Object getBean(String beanName) {
		
		return context==null?null:context.getBean(beanName);
    }
	
	public static <T> T getBean(Class<T> requiredType) {
		
		return context==null?null:context.getBean(requiredType);
    }

    public static String[] getBeanDefinitionNames() {
    	
        return context.getBeanDefinitionNames();
    }
}


引入如下maven依赖

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.2.1</version>
</dependency>
<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz-jobs</artifactId>
    <version>2.2.1</version>
</dependency>


在resource目录下application.properties添加时间执行cron表达式

#控制资源监控的时间cron表达式 这里表示每天9:00执行 0 0 9 ? * *
resource_monitro.cron=5 * * * * *


编写定时器

@Component
public class ResourceUseMonitorTask implements Job {

    @Value("${resource_monitro.cron}")
    private String time;

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }


    public static void jobStart() {
        System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:" + ApplicationContextAwareUtil.getBean(ResourceUseMonitorTask.class).getTime());
        JobDetail jobDetail = JobBuilder.newJob(ResourceUseMonitorTask.class).withIdentity("resource_monitor_job", "resource_monitor_group").build();
        //这里指定任务执行规律
        Trigger trigger = TriggerBuilder.newTrigger().withIdentity("resource_monitor_trigger", "resource_monitor_trigger_group").startNow()//
                .withSchedule(CronScheduleBuilder.cronSchedule(ApplicationContextAwareUtil.getBean(ResourceUseMonitorTask.class).getTime())).build();
        SchedulerFactory sf = new StdSchedulerFactory();
        Scheduler scheduler = null;
        try {
            scheduler = sf.getScheduler();
            scheduler.scheduleJob(jobDetail, trigger);
            scheduler.start();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        //这里执行想要的操作
    }
}

猜你喜欢

转载自blog.csdn.net/yinbucheng/article/details/79989782
今日推荐