首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Servlet后,将mysql列的值重置为默认值

使用Servlet后,将mysql列的值重置为默认值
EN

Stack Overflow用户
提问于 2013-01-08 18:33:45
回答 4查看 311关注 0票数 1

我是web开发的新手,我正在用java servlet做一些web服务,我被困在这么多地方,怎么做呢?材料:(

我正在开发一个应用程序,在该应用程序中,我需要在某个时间将mysql表列的值重置为默认值。假设我们需要在每个星期天晚上10:00重置计数器

在Java或mysql中有没有像闹钟管理器这样的东西,可以一直在后台运行,并在特定的时间触发。

谢谢,

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-08 18:56:21

您还可以使用mysql的事件调度机制

这取决于mysql的版本以及它是否已启用

票数 1
EN

Stack Overflow用户

发布于 2013-01-08 19:02:30

Java有一个很好的接口ScheduledExecutorService。你可以试试这段代码

代码语言:javascript
复制
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);

哪里

代码语言:javascript
复制
//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的类

代码语言:javascript
复制
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()方法。示例:

代码语言:javascript
复制
public class MainInitServlet extends HttpServlet {
    public void init() {
       new SqlExecutionService1();    
    }
}
票数 2
EN

Stack Overflow用户

发布于 2013-01-08 20:01:33

数据库的数据应该是计算的基础,而不是计算的结果。举个例子,账单永远不会被成功修改。

我猜这一事实将永远是程序员和架构师之间的冲突。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14213003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档