1

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

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

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

谢谢,

4

4 回答 4

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 任务的类

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-08T11:02:29.893 回答
2

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

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

于 2013-01-08T12:01:33.467 回答
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 ,您的程序可以在其中安排 Jobs 并在那时运行它。

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

例如:

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();
于 2013-01-08T10:46:48.243 回答
1

你也可以使用mysql的事件调度机制

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

于 2013-01-08T10:56:21.120 回答