2017-03-17 4 views
0

Ich verwende den Job-Scheduler von Quartz zum Ausführen einiger Jobs. Mit java api verwalte ich den Job.Wie quartz Job geplante Zeit manuell mit SQL ändern?

Wenn ich einen Job zu verschiedener Zeit mit Java neu planen,

scheduler.deleteJob(jobName, jobGroupName); 

    addJobsInScheduler(jobName, jobGroupName, triggerName, 
          triggerGroup, newTime, schoolName); 

Der Job wird immer zu der angegebenen Zeit neu geplant und ausgelöst.

Jetzt haben Sie eine Anforderung, in der ich den Job ohne UI (ohne Java API) neu planen muss.

Von meinem Verständnis, wenn ich einen Job neu plane, werden die folgenden Tabelleneinträge aktualisiert.

QRTZ_JOB_DETAILS

QRTZ_TRIGGERS

QRTZ_CRON_TRIGGERS

So manuell aktualisiert ich das Feuer Zeit in QRTZ_TRIGGERS, QRTZ_CRON_TRIGGERS. Der Job wird jedoch zum aktualisierten Zeitpunkt nicht ausgelöst.

Ist das möglich, um meine Anforderung zu erfüllen?

Hinweis: Ich benutze SQL Server 2008 für mein Backend.

Table Structure:

+0

Gibt es eine Möglichkeit, einen Screenshot der von Ihnen erwähnten Tabellen zu erstellen? Ich würde gerne eine Beispieldaten sehen, wenn dies das gleiche wie das ist, was wir verwendet haben. Ich könnte dir vielleicht helfen. :) – dco

+0

@dco danke für deine Hilfe. Aus den Kommentaren von hiroyukik ist klar, dass wir die interne Quarz-Tabelle nicht aktualisieren können. Also werde ich einen anderen Weg finden, es herauszufinden. Auch gemäß meiner Firmenrichtlinie sollte ich meine Tabellendaten nicht im Freien teilen. – Vino

+0

eigentlich können Sie. Wir haben das Quarz-Tabellen-Timing mit T-SQL aktualisiert. maskiere die Daten und verlasse den Zeitplan. Oder erstellen Sie eine Dummy-Tabelle, um Definitions- und Beispieldaten zu sehen. – dco

Antwort

2

Ich glaube, Sie sollten nicht die Quarz-Tabellen direkt mit SQL aktualisieren. Es gibt keinen richtigen Weg mit SQL in Quartz-Dokumenten, so dass niemand garantiert, dass in Zukunft keine Änderungen für die Schnittstelle zwischen Quartz und der Datenbank vorgenommen werden.

Nach den Dokumenten Lesson 9: Job Stores

niemals eine JobStore Instanz direkt in Ihrem Code verwenden. Aus irgendeinem Grund versuchen viele Leute dies zu tun. Der JobStore ist für den Einsatz hinter den Kulissen Verwendung von Quarz selbst. Sie müssen Quartz (über Konfiguration) mitteilen, welchen JobStore Sie verwenden sollen, aber dann sollten Sie nur mit der Scheduler-Schnittstelle in Ihrem Code arbeiten.

Sie sollten dem folgenden Dokument folgen, um Ihre Auslöser zu aktualisieren.

How-To: Updating a trigger

Wenn Sie keine UI haben, müssen Sie neue Schnittstelle erstellen für irgendwie Ihre Zeitpläne zu aktualisieren.

+0

Das macht Sinn. Vielen Dank – Vino

0

Von erfahren, aktualisieren wir nur die NEXT_FIRE_TIME Spalte wie folgt aus:

`UPDATE dbo.QRTZ_TRIGGERS SET NEXT_FIRE_TIME =1491004800 ` 

wo 1491004800 1. April

Verwenden Sie den T-SQL unter 2017 00:00:00 GMT ist die NEXT_FIRE_TIME zu erhalten Sie wünschen. Möglicherweise müssen Sie die GETUTCDATE() ändern.

SELECT DATEDIFF(s, '1970-01-01 00:00:00', GETUTCDATE())

aktualisieren Sie dann die QRTZ_CRON_TRIGGERS Tabelle

UPDATE dbo.QRTZ_CRON_TRIGGERS set CRON_EXPRESSION='00 10 11 ? * *'

wo '00 10 11? * * wird täglich um 11:10 Uhr ausgeführt. Sie können den Cron-Ausdruck von CronMaker

bekommen Das ist nicht die beste Praxis, aber aus Erfahrung funktioniert es für uns ohne Probleme. Ich würde empfehlen, es zuerst in Ihrer unteren Umgebung zu testen. Warten Sie, bis der Job ausgelöst wird, und prüfen Sie, ob Änderungen in der Tabelle QRTZ_TRIGGERS angezeigt werden.

Verwandte Themen