2013-01-08 45 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總是創造一個新的頂端是什麼問題?然後你可以通過當前日期獲得新的頂部。 –