特定使用Servlet后,将mysql列值重置为默认值

时间:2013-01-08 10:33:45

标签: java mysql servlets

我是网络开发的新手我正在使用java servlet制作一些Web服务,我被困在这么多怎么办?东西:(

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

有没有像Java或mysql中的报警管理器那样可以在后台运行并触发@特定时间。

谢谢,

4 个答案:

答案 0 :(得分:2)

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();    
    }
}

答案 1 :(得分:2)

数据库的数据应该是计算的基础,而不是计算的结果。在示例中,票据不会被成功修改。

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

答案 2 :(得分:1)

is there any thing like alarm manager in Java or mysql that can run all the time in background and trigger @ specific time.

查看名为Quartz的API,您的程序可以在其中安排作业,并在那时运行它。

使用方法execute(JobExecutionContext jobExecution)用于触发触发器。

EG:

SchedulerFactory schedulerFactory = new StdSchedulerFactory();
// Retrieve scheduler 
Scheduler scheduler = null;
try {
scheduler = schedulerFactory.getScheduler();
}
catch (SchedulerException e) {
e.printStackTrace();
}

//this is a job
JobDetail job = new JobDetail("jobDetail", "jobDetailGroup",       ImplementedJob.class);
 SimpleTrigger trigger = new SimpleTrigger("Trigger Name","defaultGroup", DATE);

// schedule 
scheduler.scheduleJob(job, trigger);
// start the scheduler
scheduler.start();

答案 3 :(得分:1)

您也可以使用mysql

的事件安排机制

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