我在使用定时器时想动态的根据当前时间去执行程序比如:
9月1号执行一次
9月11号执行一次
9月21号执行一次
当启动服务器时定时器会成功执行,可当我改变时间后就执行不了了。请问下能不能时间改变时,也能够动态取得当前时间,然后当条件满足时也能够执行。
public class ContextListener implements ServletContextListener {
private Timer timer = null;
SimpleDateFormat sdf = new SimpleDateFormat("dd");
String date =sdf.format(new Date());
public ContextListener() {
}
public void contextDestroyed(ServletContextEvent arg0) {
timer.cancel();
}
public void contextInitialized(ServletContextEvent arg0) {
timer = new Timer();
if(date.equals("01")||date.equals("20")||date.equals("21")){
timer.schedule(new MyTask(),3000);
System.out.println("执行!");
}
}
public class MyTask extends TimerTask {
@Override
public void run() {
SimpleDateFormat sdf = new SimpleDateFormat("MMdd");
String date =sdf.format(new Date());
// TODO Auto-generated method stub
if(date.equals("0920")){
System.out.println("清除十二月下旬客户!");
System.out.println("执行完成!");
}
if (date.equals("0111")) {
System.out.println("清除十二月上旬客户!");
}
if(date.equals("0121")){
System.out.println("清除十二月中旬客户!");
}
System.out.println("执行........");
}
}
------解决方案--------------------
用quartz吧
------解决方案--------------------
- Java code
public class MyTask extends TimerTask {private int []MONTHOFDAY ={1,11,21} ;private static boolean isRunning = false;@Overridepublic void run() {Calendar cal = Calendar.getInstance(); if(!isRunning){ for(int j=0;j<MONTHOFDAY.length;j++){ if(MONTHOFDAY[j]==cal.get(Calendar.DAY_OF_MONTH)){ isRunning = true; ////处理业务 isRunning = false; } }}else{//dothing}}}
------解决方案--------------------
- Java code
public class MyTask extends TimerTask {private Date d = new Date();@Overridepublic void run() {SimpleDateFormat sdf = new SimpleDateFormat("dd");String date = sdf.format(d);if(date.equals("01")||date.equals("20")||date.equals("21")){ SimpleDateFormat sdf = new SimpleDateFormat("MMdd"); date =sdf.format(new Date()); if(date.equals("0920")){}
------解决方案--------------------
- Java code
public class MyTask extends TimerTask {private Date d = new Date();@Overridepublic void run() {SimpleDateFormat sdf = new SimpleDateFormat("dd");String date = sdf.format(d);if(date.equals("01")||date.equals("20")||date.equals("21")){ SimpleDateFormat sdf = new SimpleDateFormat("MMdd"); date =sdf.format(d); if(date.equals("0920")){}