定期実行されるジョブでは、ジョブ実行時よりも前に確定したデータを処理する必要がある場合が多くあります。たとえば、毎日 00:30 にトリガーされるジョブは、前日の 23:30 のデータを処理する必要がありますが、トリガー時刻のみでは実際のデータ可用性ウィンドウを正確に反映できません。
SchedulerX では、タイムオフセット パラメーターを提供しており、これにより context.getDataTime() が返すデータタイムスタンプをずらすことができます。この機能により、ジョブの実際のトリガー時刻に関わらず、正しいデータウィンドウを対象に処理できます。
仕組み
ジョブが実行されると、SchedulerX は設定されたタイムオフセットをトリガー時刻に適用してデータタイムスタンプを算出します:
データタイムスタンプ = トリガー時刻 + タイムオフセットジョブ内部では、context.getDataTime() がこの調整後のタイムスタンプ(トリガー時刻ではなく)を返します。ジョブの処理ロジックでは、このタイムスタンプを用いて、正しいタイムウィンドウからデータをクエリまたはフィルター処理します。
以下の例では、オフセット値がデータタイムスタンプに与える影響を示しています:
| スケジュール | トリガー時刻 | タイムオフセット | データタイムスタンプ(getDataTime()) |
|---|---|---|---|
| 毎日 00:30 | 本日の 00:30 | -3600(1 時間) | 前日の 23:30 |
タイムオフセットの値は秒単位です。負の値を指定すると、データタイムスタンプが過去方向にずれます。
前提条件
開始する前に、以下の条件を満たしていることを確認してください:
ご利用のアプリケーションに接続済みの SchedulerX エージェントが存在すること(「クイックスタート」トピックをご参照ください)
ジョブへのタイムオフセットの設定
タイムオフセットを設定するには、調整後のデータタイムスタンプを読み取るジョブクラスを実装し、SchedulerX コンソールでオフセット値を指定してジョブを作成します。
ステップ 1:ジョブクラス内でデータタイムスタンプを取得する
JavaProcessor を継承し、context.getDataTime() を呼び出して、オフセット適用後のデータタイムスタンプを取得します。
public class TestHelloJob extends JavaProcessor {
@Override
public ProcessResult process(JobContext context) throws Exception {
System.out.println("hello schedulerx2.0");
// getDataTime() は、タイムオフセットを適用したトリガー時刻を返します。
// このタイムスタンプを用いて、正しいタイムウィンドウからデータをクエリします。
System.out.println("dataTime=" + context.getDataTime().toString("yyyy-MM-dd HH:mm:ss"));
return new ProcessResult(true);
}
}| 要素 | 説明 |
|---|---|
JavaProcessor | SchedulerX ジョブの基底クラス |
context.getDataTime() | トリガー時刻に設定されたタイムオフセットを加算したデータタイムスタンプを返します |
ProcessResult(true) | ジョブが正常に完了したことを示します |
ステップ 2:ジョブの作成とタイムオフセットの設定
SchedulerX コンソールでジョブを作成します。詳細については、「ジョブの作成」をご参照ください。
タイミング構成 ウィザードページで、タイムオフセット パラメーターを設定します。
パラメーター 値 説明 タイムオフセット -3600データタイムスタンプを 1 時間過去方向にずらします。単位:秒。
この構成により、ジョブは 00:30 にトリガーされますが、context.getDataTime() は前日の 23:30 を返します。
結果の確認
ジョブ実行後、インスタンス ページに移動します。
該当のジョブインスタンスを見つけ、操作 列の 詳細 をクリックします。
ジョブインスタンスの詳細 ページで、基本情報 をクリックします。
データ時刻 フィールドに、期待通りのオフセット適用後のタイムスタンプ(たとえば、00:30 ではなく前日の 23:30)が表示されていることを確認します。
次のステップ
ジョブの管理については、「ジョブの作成」をご参照ください。