我是 Web 开发的新手 我正在使用 java servlet 制作一些 Web 服务,但我被困在了这么多 怎么做?东西 :(
我正在开发一个应用程序,我需要在某个时间将 mysql 表列值重置为默认值,假设我们需要在每个星期日晚上 10:00 重置计数器@。
有没有像Java或mysql中的警报管理器这样可以一直在后台运行并触发@特定时间的东西。
谢谢,
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();
}
}
数据库的数据应该是计算的基础,而不是计算的结果。在示例中,法案将永远不会被成功修改。
我想这个事实将永远是程序员和架构师之间的冲突。
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();
你也可以使用mysql的事件调度机制
这取决于mysql的版本以及是否启用