我是网络开发的新手我正在使用java servlet制作一些Web服务,我被困在这么多怎么办?东西:(
我正在开发一个应用程序,我需要在某个时间将mysql表列值重置为默认值,假设我们需要在每个星期日晚上10点重置计数器@。
有没有像Java或mysql中的报警管理器那样可以在后台运行并触发@特定时间。
谢谢,
答案 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的版本以及它是否已启用