web-dev-qa-db-ja.com

トリガーによるJavaプログラムの実行。

更新トリガーにJavaプログラムを実行させます。

テーブルがありますT1Flagという名前の列。 Flagが変更されるたびに、Javaプログラムの実行をもたらすトリガーを実行したいと思います。

これは可能ですか?

6
Ankit Kapoor

はい、 MySQLユーザー定義関数MySQL 5.5 FAQ:Triggers を参照)を使用して lib_mysqludf_sys をインストールします

次に、たとえば、次のようにsys_execを呼び出す独自のトリガーを作成できます。

delimiter |
 CREATE TRIGGER testtrigger BEFORE UPDATE ON T1
  FOR EACH ROW BEGIN
   DECLARE result int(10);
   IF NEW.Flag <> OLD.Flag THEN  
     SET result = sys_exec('/path/to/javabin -jar your.jar');
     -- other kind of works and checks...
   END IF;
 END;
|

resultには、外部プログラムの終了コードが含まれています

このライブラリには他にも便利な関数があります:

  • sys_eval:任意のコマンドを実行し、その出力を返します。
  • sys_get:環境変数の値を取得します
  • sys_set:環境変数を作成するか、既存の環境変数の値を更新します
  • sys_exec:任意のコマンドを実行し、その終了コードを返します

詳細 ここ

開発環境で試してみてください...

この関数が必要かどうかを決定する際は十分に注意してください。 UDFはすべてのデータベースユーザーが使用できます-ユーザーにEXECUTE権限を付与することはできません。 sys_execに渡されたコマンド文字列はほとんどすべてを実行できるので、関数を公開すると非常にリアルなポーズになりますセキュリティハザード

しかし、とにかく、私はレムス・ルサヌの提案に同意します

6
Cristian Porta

私はこの投稿がかなり古く、それを拾って申し訳ありませんでしたが、最近同じ要件があったため、MySQLトリガー内からJNIを使​​用してJavaコードを呼び出す)MySQL UDFを作成しました。同様の今後のリクエストの参照としてこれを投稿しています。bitbucketでコードをチェックインしました。ここからダウンロードできます:
MySQLUDFJavaLauncher そして、ここにも Instructions へのリンクがあります。
たぶんこれは他の人を助けるでしょう。

4
user35934