我是web开发的新手,我正在用java servlet做一些web服务,我被困在这么多地方,怎么做呢?材料:(
我正在开发一个应用程序,在该应用程序中,我需要在某个时间将mysql表列的值重置为默认值。假设我们需要在每个星期天晚上10:00重置计数器
在Java或mysql中有没有像闹钟管理器这样的东西,可以一直在后台运行,并在特定的时间触发。
谢谢,
发布于 2013-01-08 18:56:21
您还可以使用mysql的事件调度机制
这取决于mysql的版本以及它是否已启用
发布于 2013-01-08 19:02:30
Java有一个很好的接口ScheduledExecutorService。你可以试试这段代码
ScheduledExecutorService service = Executors.newScheduledThreadPool(1);
//every day to execute
long everyDayDelay = 24*60*60*1000;
//first time to execute, it can be your special date
//for example 5 seconds after launch
long timeToExecute = System.currentTimeMillis()+5*1000;
service.scheduleWithFixedDelay(new Task(), getTimeToLaunch(timeToExecute), everyDayDelay, TimeUnit.MILLISECONDS);哪里
//return difference between now and timeToExecute
public static long getTimeToLaunch(long timeToExecute){
long current = System.currentTimeMillis();
return timeToExecute - current;
}
class Task implements Runnable{
@Override
public void run() {
System.out.println("Run task!");
}
}更新:执行sql-tasks的类
public class SqlExecutionService1 {
public static final long everyDayDelay = 24*60*60*1000;
public SqlExecutionService1(){
ScheduledExecutorService service = Executors.newScheduledThreadPool(1);
//every day to execute
//first time to execute
//for example 5 seconds after launch
long timeToExecute = System.currentTimeMillis()+5*1000;
service.scheduleWithFixedDelay(new SqlTask1(), getTimeToLaunch(timeToExecute), everyDayDelay, TimeUnit.MILLISECONDS);
}
private long getTimeToLaunch(long timeToExecute){
long current = System.currentTimeMillis();
return timeToExecute - current;
}
}
class SqlTask1 implements Runnable{
@Override
public void run() {
//your sql tasks
}
}要创建此类,请在应用程序服务器启动时-在一个主servlet中使用init()方法。示例:
public class MainInitServlet extends HttpServlet {
public void init() {
new SqlExecutionService1();
}
}发布于 2013-01-08 20:01:33
数据库的数据应该是计算的基础,而不是计算的结果。举个例子,账单永远不会被成功修改。
我猜这一事实将永远是程序员和架构师之间的冲突。
https://stackoverflow.com/questions/14213003
复制相似问题