私は Web 開発に不慣れです Java サーブレットを使用していくつかの Web サービスを作成しています。もの :(
ある時点で mysql テーブルの列の値をデフォルト値にリセットする必要があるアプリケーションを開発しています。たとえば、毎週日曜日の午後 10 時にカウンターをリセットする必要があるとします。
バックグラウンドで常に実行でき、@ 特定の時間にトリガーできる、Java または mysql のアラーム マネージャーのようなものはありますか。
ありがとう、
データベースのデータは、計算の結果ではなく、計算の基礎であるべきです。例では、請求書は正常に改訂されることはありません。
この事実は、プログラマーとアーキテクトの間の衝突になると思います。
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();
}
}
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();
mysqlのイベント スケジューリング メカニズムを使用することもできます。
これは、mysql のバージョンと、それが有効になっているかどうかによって異なります。