次のコードを検討してください。
class MyJob {
def execute() {
println "Hello at->"+new Date()
}
}
このコードを実行すると、トリガーを割り当てずに1分ごとに実行が開始されます。このプロパティを無効にするにはどうすればよいですか?トリガーをかけるたびにこの仕事を始めたいです。
次のコードを検討してください。
class MyJob {
def execute() {
println "Hello at->"+new Date()
}
}
このコードを実行すると、トリガーを割り当てずに1分ごとに実行が開始されます。このプロパティを無効にするにはどうすればよいですか?トリガーをかけるたびにこの仕事を始めたいです。
デフォルトのトリガーを無効にし、起動時にトリガーを割り当てない場合は、クラスで空のトリガークロージャが必要です。
class MyJob {
static triggers = { }
...
}
これにより、デフォルトのトリガーではなく、クロージャーのトリガー(none)がジョブに割り当てられます。
あなたが成し遂げようとしていることは少し曖昧です。トリガーを「作成」するときにこれを実行する場合は、実際にはこれをcronジョブに入れる必要はありません。
ただし、特定のイベントの後にこれをアクティブにしたい場合。次に、トリガーを作成しますが、実行前に何らかのチェックを行います。元。
class MyJob {
static triggers = { .... create the schedule
def execute() {
// instead of create a trigger, you create a temp file that would allow/prevent
// the execution
def runIt = new File(runFile.txt)
if (runIt.exists()) {
println "Hello at->"+new Date()
}
}
}
私があなたがやりたいことを理解しているなら、あなたは最初にクォーツ構成をインストールするでしょう:
grails install-quartz-config
次に、自動起動を無効にします。
quartz {
autoStartup = false
jdbcStore = false
}
次に、アプリケーション内でジョブを動的にスケジュールします。
// creates cron trigger;
MyJob.schedule(String cronExpression, Map params?)
// creates simple trigger: repeats job repeatCount+1 times with delay of repeatInterval milliseconds;
MyJob.schedule(Long repeatInterval, Integer repeatCount?, Map params?) )
// schedules one job execution to the specific date;
MyJob.schedule(Date scheduleDate, Map params?)
//schedules job's execution with a custom trigger;
MyJob.schedule(Trigger trigger)
// force immediate execution of the job.
MyJob.triggerNow(Map params?)