java监控存储过程执行情况

引言

使用jdbc调用存储过程时,只要可以调通返回到的都是成功,无法知晓存储过程内部的执行情况,因此我们考虑在从存储过程本身出发,增加返回值和日志记录以查询存储过程执行的情况。

增加输出项

参数名类型是否必填说明
codeintN返回编码(用于程序判断存储过程是否执行成功)200 成功 500 失败
messagetextN返回信息(当存储过程执行出错时,或者用户自定义异常将信息存入message中返回给程序)

增加监控表

在存储过程内部将存储过程的执行情况存入监控表中,方便程序查询执行的情况

CREATE TABLE task_procedure_monitor (
  monitor_id varchar(50)  not  NULL,
  procedure_name varchar(100)   NOT NULL,
  monitor_msg varchar(2000)   NULL,
  remark varchar(255)   NULL
);

存储过程实例

sqlserver


CREATE PROCEDURE [dbo].demo_procedure
  @code int OUTPUT,
  @message varchar(200) OUTPUT
AS
BEGIN
  SET @code = 200
  SET @message = '成功'
  BEGIN TRY

  ------- 业务逻辑 -------
  DELETE  from dept_income

  ------- 自定义异常(选填) -------
  -- RAISERROR('执行过程中出现错误:%s',16,1,'数据为空')
  END TRY
  BEGIN CATCH
  ------- 存储过程执行失败 -------
    SET @code = 500
    SET @message = ERROR_MESSAGE()
  END CATCH
  ------- 记录结果(选填) -------
  -- INSERT INTO ex_task_procedure_monitor([monitor_id], [procedure_name],  [monitor_msg], [remark]) VALUES (NEWID(),'test_delete',@message,null);

END

oracle

CREATE OR REPLACE PROCEDURE demo_procedure(
    CODE out number,
    MESSAGE out VARCHAR2 
  )
  IS
  BEGIN
     CODE := 200;
     MESSAGE := '成功';
  
    ------- 业务逻辑 -------
    DELETE from WYT_INCOME;
    ------- 自定义异常(选填) -------
      -- RAISE_APPLICATION_ERROR(-20123, '出异常了');
    ------ 记录结果(选填) -------
     INSERT INTO ex_task_procedure_monitor(monitor_id, , procedure_name, monitor_msg, remark) VALUES (sys_guid(),'test_delete',MESSAGE,null);
    ------- 存储过程执行失败 -------
      EXCEPTION
      -- WHEN my_error THEN
      -- CODE := 500;
    -- MESSAGE:= sqlerrm;
      WHEN OTHERS THEN
      CODE := 500;
    MESSAGE:= sqlerrm;
      ROLLBACK;
    ------ 记录结果(选填) -------
     INSERT INTO ex_task_procedure_monitor(monitor_id, , procedure_name, monitor_msg, remark) VALUES (sys_guid(),'test_delete',MESSAGE,null);
  
  END;

java调用

CallableStatement clbStmt = conn.prepareCall("{CALL " + "demo_procedure" + "(?,?)}");
// 设置输出参数
clbStmt.registerOutParameter(1, Types.VARCHAR);
clbStmt.registerOutParameter(2, Types.VARCHAR);
clbStmt.execute();
String code = clbStmt.getString(1);
String message = clbStmt.getString(2);
if(!"200".equals(code)){
   throw new BusinessException("存储过程执行失败,返回信息:" + message);
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java可以通过使用FFmpeg来存储直播流视频。FFmpeg是一个开源的跨平台音视频处理工具,可以对音频和视频进行编码、解码、转码、合并等操作。 首先,我们需要使用Java的外部程序调用接口(ProcessBuilder或Runtime.exec)来执行FFmpeg命令。通过命令行参数,我们可以指定要存储的直播流视频的源地址、存储路径、格式和其他参数。 在Java代码中,我们可以创建一个新的进程,并执行FFmpeg命令,如下所示: ``` String ffmpegPath = "ffmpeg的安装路径/ffmpeg"; // FFmpeg的安装路径 String sourceUrl = "直播流视频的源地址"; // 直播流视频的源地址 String outputPath = "存储路径/存储文件名"; // 存储路径和文件名 String format = "存储文件的格式"; // 存储文件的格式,如mp4、avi等 String[] cmd = {ffmpegPath, "-i", sourceUrl, "-c", "copy", "-f", format, outputPath}; ProcessBuilder processBuilder = new ProcessBuilder(cmd); Process process = processBuilder.start(); ``` 在上面的代码中,我们使用FFmpeg命令行参数指定了输入源的地址(-i sourceUrl)和输出文件的格式(-f format),并通过“-c copy”参数实现了流转存而无需重新编码。通过ProcessBuilder创建的进程来执行FFmpeg命令。 执行完上述代码后,FFmpeg将开始将直播流视频存储到指定的路径和文件名中。我们可以等待进程执行完成,然后根据需要进行后续操作,例如播放、转换格式等。 需要注意的是,执行FFmpeg命令可能需要一定时间,具体时间取决于视频的大小和网络情况。此外,为了确保程序的稳定性和可靠性,建议在代码中对执行过程进行错误处理和异常捕获,以及对进程的运行状态进行监控和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值