1

私は Web 開発に不慣れです Java サーブレットを使用していくつかの Web サービスを作成しています。もの :(

ある時点で mysql テーブルの列の値をデフォルト値にリセットする必要があるアプリケーションを開発しています。たとえば、毎週日曜日の午後 10 時にカウンターをリセットする必要があるとします。

バックグラウンドで常に実行でき、@ 特定の時間にトリガーできる、Java または mysql のアラーム マネージャーのようなものはありますか。

ありがとう、

4

4 に答える 4

2

データベースのデータは、計算の結果ではなく、計算の基礎あるべきです。例では、請求書は正常に改訂されることはありません。

この事実は、プログラマーとアーキテクトの間の衝突になると思います。

于 2013-01-08T12:01:33.467 に答える
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 タスクを実行するクラス

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
    }    
}

このクラスを作成するには、アプリケーション サーバーの起動時に、メイン サーブレットの 1 つでメソッド init() を使用します。例 -

public class MainInitServlet extends HttpServlet {
    public void init() {
       new SqlExecutionService1();    
    }
}
于 2013-01-08T11:02:29.893 に答える
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)use を使用してトリガーを起動します。

例えば:

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();
于 2013-01-08T10:46:48.243 に答える
1

mysqlのイベント スケジューリング メカニズムを使用することもできます。

これは、mysql のバージョンと、それが有効になっているかどうかによって異なります。

于 2013-01-08T10:56:21.120 に答える