シェルスクリプトなどで走らせる方法もありますが、異質なものを組み合わせるのは限界があります。
Java で書けるスケジューラーで、Quartz なる優れた(ちょっと癖のある)ライブラリがあります。
Quartz の使い方はネットでもあがってますが、自前の Job を走らせたいときつまづきやすいのが Job へ値を引き渡したいとき。
ネットであまり記述がなかったので書きます。
このさいコンストラクタを使って値を引き渡す方法はx(だめ)です。
ここは .usingJobData(String, String) を用います。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import static org.quartz.SimpleScheduleBuilder.simpleSchedule; | |
import org.quartz.JobBuilder; | |
import org.quartz.JobDetail; | |
import org.quartz.Scheduler; | |
import org.quartz.Trigger; | |
import org.quartz.TriggerBuilder; | |
import org.quartz.impl.StdSchedulerFactory; | |
public class CronTest { | |
public static void main(String[] args) { | |
try { | |
JobDetail job = JobBuilder.newJob(CronTestJob.class).usingJobData("cmd", "echo") | |
.withIdentity("trigger", "group").build(); | |
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger", "group").startNow() | |
.withSchedule(simpleSchedule().withIntervalInMilliseconds(1000).repeatForever()).build(); | |
Scheduler scheduler = null; | |
scheduler = StdSchedulerFactory.getDefaultScheduler(); | |
scheduler.scheduleJob(job, trigger); | |
scheduler.start(); | |
Thread.sleep(10000); | |
scheduler.shutdown(); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} | |
} | |
} |
受け取る側は JobExecutionContext から getJobDataMap() を使って受け取ります。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.IOException; | |
import org.quartz.Job; | |
import org.quartz.JobExecutionContext; | |
import org.quartz.JobExecutionException; | |
public class CronTestJob implements Job{ | |
String cmd="yahho"; | |
@Override | |
public void execute(JobExecutionContext arg0) throws JobExecutionException { | |
try { | |
String cmd=(String)arg0.getJobDetail().getJobDataMap().get("cmd"); | |
System.out.println(cmd); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} | |
} | |
} |