2013-01-08 46 views
1

我是web开发新手我正在使用java servlets制作一些web服务,而且我陷入了这么多问题怎么办?东西:(在使用Servlet后将mysql colum值重置为默认值

我开发的,我需要MySQL表列中的值在一段时间内重置回默认值让我们说,我们需要将计数器复位@每周日下午10:00中的应用。

有没有像Java或MySQL的报警经理的任何东西,可以在后台和触发@特定时间运行的所有时间。

感谢,

回答

1

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

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

我可以放第一个片段,我不认为我们可以放入Servlet,从那里我可以启动调度程序任务,这样它可以独立于PC并仅依赖于服务器。 –

+0

@NixitPatel可能是你可以创建一个特定的类,其中将创建调度器。我认为你可以创建这个类,当你的应用程序服务器启动。 –

+0

你能告诉我那是哪一类吗?我对此完全陌生。 –

2

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

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

+1

嘿,想象一下,如果像Travian这样的在线游戏存在黄金超时计算错误,如果你修正了这个错误,游戏者的黄金将被正确计算。但是如果你更新数据库中的结果,你几乎不得手动重新计算他​​所有的黄金时间。 –

+0

我正在制作一个应用程序,其中用户假设每天排名前20,项目或每周至20项,你们可以指出一个更好的方法来做到这一点。 –

+0

@NixitPatel总是创造一个新的顶端是什么问题?然后你可以通过当前日期获得新的顶部。 –