先定义一个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 {
//这里执行想要的操作
}
}