import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
public class BatchServlet extends HttpServlet {
private static final long serialVersionUID = -2612870262013503659L;
private ScheduledThreadPoolExecutor a = new ScheduledThreadPoolExecutor(1);
@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
super.init();
System.out.println("init");
Runnable command = new Runnable() {
public void run() {
printOK();
}
};
try {
a.scheduleAtFixedRate(command, calculateStartTime(), 24 * 60 * 60,
TimeUnit.SECONDS);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void destroy() {
// TODO Auto-generated method stub
super.destroy();
System.out.println("destroy");
a.shutdownNow();
}
private static long calculateStartTime() throws ParseException {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
long targetLongTime = calendar.getTimeInMillis();
long currentLongTime = System.currentTimeMillis();
System.out.println(targetLongTime);
if (targetLongTime < currentLongTime) {
targetLongTime += 24 * 60 * 60 * 1000;
}
System.out.println(targetLongTime - currentLongTime);
return (targetLongTime - currentLongTime) / 1000;
}
private static void printOK() {
System.out.println("ok");
System.out.println(new SimpleDateFormat("HHmmss").format(new Date()));
}
}
[color=red]别忘了在web.xml中配置[/color]
<servlet>
<servlet-name>BatchServlet</servlet-name>
<servlet-class>
包名
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
Okay,好吧,Timer也挺好用的。
private void printOK() {
System.out.println("OK");
}
public void testTimer() {
Timer t = new Timer();
TimerTask tt = new TimerTask() {
@Override
public void run() {
printOK();
}
};
Date date = new Date();
t.schedule(tt, date, 1000);
}
当然时间也可以自己设置。