我是web开发新手我正在使用java servlets制作一些web服务,而且我陷入了这么多问题怎么办?东西:(在使用Servlet后将mysql colum值重置为默认值
我开发的,我需要MySQL表列中的值在一段时间内重置回默认值让我们说,我们需要将计数器复位@每周日下午10:00中的应用。
有没有像Java或MySQL的报警经理的任何东西,可以在后台和触发@特定时间运行的所有时间。
感谢,
我是web开发新手我正在使用java servlets制作一些web服务,而且我陷入了这么多问题怎么办?东西:(在使用Servlet后将mysql colum值重置为默认值
我开发的,我需要MySQL表列中的值在一段时间内重置回默认值让我们说,我们需要将计数器复位@每周日下午10:00中的应用。
有没有像Java或MySQL的报警经理的任何东西,可以在后台和触发@特定时间运行的所有时间。
感谢,
您还可以使用的mysql
这取决于MySQL版本,以及是否启用与否
is there any thing like alarm manager in Java or mysql that can run all the time in background and trigger @ specific time.
看一个叫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();
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!");
}
}
UPDATE:Class对执行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
}
}
要创建这个类,你的应用服务器启动时 - 使用方法init()在你的一个主要servlet中。 实施例 -
public class MainInitServlet extends HttpServlet {
public void init() {
new SqlExecutionService1();
}
}
的数据库的数据应该是基础为计算,计算的不结果。在示例中不会成功修改。
我想这个事实将永远是程序员和建筑师之间的冲突。
嘿,想象一下,如果像Travian这样的在线游戏存在黄金超时计算错误,如果你修正了这个错误,游戏者的黄金将被正确计算。但是如果你更新数据库中的结果,你几乎不得手动重新计算他所有的黄金时间。 –
我正在制作一个应用程序,其中用户假设每天排名前20,项目或每周至20项,你们可以指出一个更好的方法来做到这一点。 –
@NixitPatel总是创造一个新的顶端是什么问题?然后你可以通过当前日期获得新的顶部。 –
我可以放第一个片段,我不认为我们可以放入Servlet,从那里我可以启动调度程序任务,这样它可以独立于PC并仅依赖于服务器。 –
@NixitPatel可能是你可以创建一个特定的类,其中将创建调度器。我认为你可以创建这个类,当你的应用程序服务器启动。 –
你能告诉我那是哪一类吗?我对此完全陌生。 –