通过触发器执行 Java 程序。

sim*_*dDB 8 mysql trigger

我想让更新触发器执行 Java 程序。

我有一个T1名为Flag. 每当Flag发生变化时,我都想运行一个触发器来执行 Java 程序。

这可能吗?

Cri*_*rta 7

是的,使用MySQL 用户定义函数(请参阅MySQL 5.5 常见问题解答:触发器)并安装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;
|
Run Code Online (Sandbox Code Playgroud)

result包含外部程序的退出代码

这个库中还有其他有用的函数:

  • sys_eval:执行任意命令,并返回其输出。
  • sys_get : 获取环境变量的值
  • sys_set : 创建环境变量,或更新现有环境变量的值
  • sys_exec : 执行任意命令,并返回它的退出代码

更多信息在这里

在开发环境中尝试一下,然后...

在决定是否需要此功能时要非常小心。UDF 可供所有数据库用户使用 - 您不能为其授予 EXECUTE 权限。由于传递给的命令字符串sys_exec几乎可以做任何事情,因此公开该函数会带来非常真实的 安全隐患

但无论如何,我同意 Remus Rusanu 的提议


use*_*934 5

我知道这篇文章已经很旧了,很抱歉捡起来,但我最近有同样的要求,所以我创建了一个 MySQL UDF,它使用 JNI 从 MySQL 触发器中调用 Java 代码。我将其发布为未来类似请求的参考。我已经检查了 bitbucket 中的代码。你可以从这里下载它:
MySQLUDFJavaLauncher,这里也是说明的链接。
也许这会帮助其他人。