当前位置: 代码迷 >> Java Web开发 >> java如何根据用户设定的时间进行定时任务
  详细解决方案

java如何根据用户设定的时间进行定时任务

热度:161   发布时间:2016-04-16 21:44:14.0
java怎么根据用户设定的时间进行定时任务
大家好,现在有个需求。用户在页面设定时间,在次日的1点执行定时任务。看了Quartz和TimerTask,他们是根据当期时间然后设置一定的时间间隔来定时的执行任务。而现在只想在次日1点执行任务,而且只是执行1次,请问大家有什么好的办法?
------解决思路----------------------

// 一天的毫秒数
 long daySpan = 24 * 60 * 60 * 1000;
 
 // 规定的每天时间15:33:30运行
 final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd '15:33:30'");
 // 首次运行时间
 Date startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(sdf.format(new Date()));
 
 // 如果今天的已经过了 首次运行时间就改为明天
 if(System.currentTimeMillis() > startTime.getTime())
  startTime = new Date(startTime.getTime() + daySpan);
 
 Timer t = new Timer();
 
 TimerTask task = new TimerTask(){
  @Override
  public void run() {
   // 要执行的代码
   System.err.println("xxxxxxxxx");
  }
 };

 // 以每24小时执行一次
 t.scheduleAtFixedRate(task, startTime, daySpan);

------解决思路----------------------
     Calendar cal = Calendar.getInstance();
        cal.set(Calendar.HOUR_OF_DAY, 1);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.MILLISECOND, 0);
        cal.add(Calendar.DAY_OF_MONTH, 1);

        Trigger trigger1 = TriggerBuilder.newTrigger()  
                .withIdentity("trigger2", "group1")  
                .startAt(cal.getTime())  //start time 22:03:59  
//              .endAt(dateOf(22, 04, 59)) //end time 22:04:59  
                .withSchedule(SimpleScheduleBuilder.simpleSchedule()  
                        .withIntervalInSeconds(1)    
                        .repeatForever())  
                        .build();  

------解决思路----------------------
用户的配置可以存在数据库里面,数据库有个字段标识是否执行,每日定时任务扫描,扫描到标识为“执行”才执行相关任务,不知道能否帮到你。
  相关解决方案