Oracle対応版XXL-JOBスケジューリングフレームワーク

特徴

XXL-JOBは軽量かつ拡張性の高い分散タススケジューリングプラットフォームで、迅速な開発と簡単な学習が可能です。オープンソースとして複数の企業で製品環境で使用されており、すぐに利用できます。このフレームワークは非常に使いやすいですが、私の業務環境ではOracleデータベースを使用しているため、本来MySQL向けに設計されているXXL-JOBをいくつかのカスタマイズが必要でした。後続の利用者のため、SQL文と自動増分シーケンスを作成し、XXL-JOB-2.3.0バージョンに統合しました。この環境は既に本番環境で正常に稼働しているため、安心してご利用いただけます。さらに、DingTalkグループ通知ロボットをフレームワークに統合し、エラー発生時に直接ログURLを通知する機能を実装しました。これにより、迅速な確認と対応が可能です。

XXL-JOB-2.3.0バージョン

Giteeアドレス:xxl-job-oracle

プロジェクト紹介:SQLファイルはsql-docディレクトリにあります。DingTalk通知機能を使用しない場合は、DDTalkUtilツールクラスとその参照を削除してください。使用する場合は、DingTalk通知ロボットのトークンを申請する必要があります。関連チュートリアルは公式サイトをご参照ください:カスタムロボット接続

カスタムロボット接続

申請完了後、DDTalkUtil内の***と記載されている部分を修正してください。テスト環境と本番環境のロボットを区別するためのテーブルも提供しており、通知が必要かどうかを示すフィールドも含まれています。この機能が必要ない場合は、直接削除してください。具体的な修正は以下の通りです:


public class DingNotifierUtil {

    private static final Logger logger = LoggerFactory.getLogger(DingNotifierUtil.class);
    private static final RestTemplate restTemplate = new RestTemplate();

    public static void sendAlert(String jobTitle, String message, long jobId) {
        try {
            EnvironmentConfigVO envConfig = XxlJobAdminConfig.getAdminConfig()
                .getXxlJobInfoDao()
                .getEnvironment("***");
            
            logger.info("環境設定取得: {}", envConfig.toString());
            
            // 通知不要の場合
            if ("N".equals(envConfig.getNotificationEnabled())) {
                return;
            }
            
            String webhookUrl = "https://oapi.dingtalk.com/robot/send?access_token=***";
            JsonObject payload = new JsonObject();
            payload.addProperty("msgtype", "link");
            
            HttpHeaders headers = new HttpHeaders();
            headers.add("Content-Type", "application/json;charset=UTF-8");
            
            JsonObject link = new JsonObject();
            link.addProperty("text", message);
            link.addProperty("title", envConfig.getEnvironmentName() + jobTitle);
            link.addProperty("messageUrl", envConfig.getLogUrl() + jobId);
            payload.add("link", link);
            
            HttpEntity<String> requestEntity = new HttpEntity<>(payload.toString(), headers);
            ResponseEntity<String> response = restTemplate.exchange(
                webhookUrl, 
                HttpMethod.POST, 
                requestEntity, 
                String.class
            );
            
            logger.info("DingTalk通知結果: {}", response.getBody());
        } catch (Exception e) {
            logger.error("DingTalk通知エラー: {}", e.getMessage());
        }
    }
}

実際のところ、XXL-JOBは非常に強力な機能を持っており、ビジネス要件に応じてDingNotifierUtilツールクラスをカスタマイズして対応できます。ページのタブをクリックするとXXL-JOBのログページに直接ジャンプでき、非常に便利です。

Oracleデータベース対応

関連するSQL文はOracleデータベース用に修正済みです。Oracleデータベースに直接コピー&ペーストして使用してください。

  1. sql-docディレクトリ内のtable.sqlスクリプトを実行します。デフォルトユーザー名/パスワードはadmin/123456です
  2. XXL-JOBの関連チュートリアルは公式サイトをご参照ください:XXL-JOB公式ドキュメント
  3. application.propertiesファイルでOracleデータベース接続情報を修正します

# Oracleデータベース接続設定
spring.datasource.url=jdbc:oracle:thin@[IPアドレス]:[ポート番号]:[サービス名]
spring.datasource.username=[ユーザー名]
spring.datasource.password=[パスワード]
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver

タグ: XXL-Job Oracle スケジューリング 分散システム DingTalk

7月26日 00:57 投稿