特徴
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データベースに直接コピー&ペーストして使用してください。
- sql-docディレクトリ内のtable.sqlスクリプトを実行します。デフォルトユーザー名/パスワードはadmin/123456です
- XXL-JOBの関連チュートリアルは公式サイトをご参照ください:XXL-JOB公式ドキュメント
- 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