1.引入必需的jar
2.在web.xml中配置监听,启动时初始化定时任务
<listener>
<listener-class>com.iss.iaf.task.StartInit</listener-class>
</listener>
3.新建java类,StartInit实现ServletContextListener。
public void contextDestroyed(ServletContextEvent arg0) {
}
public void contextInitialized(ServletContextEvent arg0) {
TaskManager.getInstance();
}
4.新建java类,TaskManager
private static class SingleHolder{
private static TaskManager instance = new TaskManager();
}
//任务的入口
public static TaskManager getInstance(){
return SingleHolder.instance;
}
public void startTask(){
TaskManager.getInstance();
}
private TaskManager(){
try {
Scheduler sched = StdSchedulerFactory.getDefaultScheduler();
//配置任务的执行时间
String key = "0 0/1 * * * ? ";
TaskUtil.cronExecute(ExecuterTask.class , sched, key);
sched.start();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
5.新建java类,TaskUtil
/**
* 根据cornExpression来执行计划任务
* @param jobClass
* @param sched
* @param cronExpression
*/
public static void cronExecute(Class<? extends Job> jobClass,Scheduler sched,String cronExpression,String name){
if(!CronExpression.isValidExpression(cronExpression)){
System.out.println("表达式不合法");
System.out.println(cronExpression+"");
}
try{
JobDetail job = new JobDetail(name, name, jobClass);
CronTrigger trigger = new CronTrigger();
trigger.setName(name+"_trigger");
trigger.setGroup(name+"_group");
trigger.setCronExpression(cronExpression);
sched.scheduleJob(job, trigger);
}catch(Exception e){
e.printStackTrace();
}
}
6.新建java类,ExecuterTask 实现Job
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
// 直接在实现里面写任务的业务
}
注:如果想要注入bean,则要注意三点
1.在类上方加上@Component注解
2.public static ExecuterTask executerTask; 静态化类
3.public ExecuterTask() {
}
@PostConstruct
public void init() {
executerTask = this;
executerTask.reportManagementService = this.reportManagementService ;
}
只要三点要求达到,则可以注入bean