zoukankan      html  css  js  c++  java
  • taskctl实现自定义mysql存储过程作业类型调用

      TASKCTL支持任意作业类型的扩展,但目前TASKCTL 4.1.3版本中并没有内置mysql存储过程的作业插件。通过介绍使TASKCTL支持调度mysql存储过程作业类型的步骤,一方面解决一些朋友迫切的mysql存储过程调度需求,另一方面抛砖引玉,让大家能够在TASKCTL中扩展更多的适应自己需求的作业插件。

    1、在$TASKCTLDIR/src/plugin/mysqlproc/shell/目录中新增cprunmysqlproc.sh作业插件,实际上就是一个shell程序,代码如下:

    #!/bin/sh
    
    
    if [ $# -ne 3 ]
    then
        echo "Param error !"
        echo "Usage: $0 progname para expara"
        exit 126
    fi
    
    
    
    #------------------------------------------------------------------------------
    #      第一步: 接收参数
    #------------------------------------------------------------------------------ 
    ProgName=$1
    Para=`echo $2`            #此处为了去前后空格,以便判断是否真正有入口参数
    ExpPara=$3
    
    #------------------------------------------------------------------------------
    #      第二步: 解析exppara,分别获取数据库HOST,数据库名称、用户、密码等信息
    #------------------------------------------------------------------------------ 
    
    # 数据库名 并去前后空格
    tmpstr=`echo ${ExpPara}|awk -F ',' '{print $1}'`
    DBHOST=`echo ${tmpstr}`
    
    
    # 数据库名 并去前后空格
    tmpstr=`echo ${ExpPara}|awk -F ',' '{print $2}'`
    DBNAME=`echo ${tmpstr}`
    
    
    # 数据库用户 并去前后空格
    tmpstr=`echo ${ExpPara}|awk -F ',' '{print $3}'`
    DBUSER=`echo ${tmpstr}`
    
    
    # 数据库密码 并去前后空格
    tmpstr=`echo ${ExpPara}|awk -F ',' '{print $4}'`
    DBPASSWD=`echo ${tmpstr}`
    
    #------------------------------------------------------------------------------
    #      第三步: 执行存储过程
    #------------------------------------------------------------------------------ 
    sqlstr=`mysql -h${DBHOST} -u${DBUSER} -p${DBPASSWD} <<EOF 2>&1
    call ${DBNAME}.${ProgName}('${Para}',@retcode,@retmsg);
    select '\r';
    select @retcode;
    select @retmsg;
    quit
    EOF`
    
    #------------------------------------------------------------------------------
    #      第四步: 插件返回
    #------------------------------------------------------------------------------ 
    
    echo "================================================================================" 
    
    result=`echo $sqlstr |awk '{print $3,$5}'`
    out=`echo $result |awk '{print $1}'`
    CMSG=`echo $result |awk '{print $2}'`
    echo ${CMSG}
    echo ""
    if [ $out -eq 0 ] 
    then
    exit 0
    else
    exit 1
    fi
    

      

    2、在桌面软件admin中进入"任务类型"功能中,设置mysqlproc作业类型,如下图所示:

    3、在桌面软件designer中设计mysqlproc作业如下代码片段:

     <!-- 按照插件程序的要求,para属性中设置一个输入参数,exppara属性中设置 主机名,数据库名,用户名,用户密码,用逗号隔开-->  
      <mysqlproc>
        <name>MainModul_JobNode0</name>
        <progname>proc_taskctl</progname>
        <para>$(mysql_in_param1)</para>
        <exppara>$(mysqlhost),$(mysqldbname),$(mysqluser),$(mysqlpwd)</exppara>
      </mysqlproc>
    

    4、附mysql存储过程程序 proc_taskctl 示例代码:

    CREATE PROCEDURE `proc_taskctl`(IN msg VARCHAR(20),OUT retcode int,OUT retmsg varchar(255))
    BEGIN
    SET retmsg = concat('hello:',msg);
    SET retcode = 0;
    END
    

    5、至此就可以调用mysql存储过程了。 

    开源源码及介绍:https://www.oschina.net/p/taskctl 技术交流QQ群:75273038(一群)422877115(二群)
  • 相关阅读:
    数据库原理 第七章 数据库设计和ER模型
    jeecgboot常见问题及处理方法-found character '@' that cannot start any token. (Do not use @ for indentation)
    jeecgboot积木报表(jimuReport)Oracle切换
    datart表结构
    这几天找工作的经历
    Jenkins 无法登陆解决方法
    Nginx 部署前后端分离项目(SpringBoot Vue)
    CentOS7 用yum方式安装Nginx
    Centos 7 安装 MYSQL 8.0
    Centos 7 安装 JDK1.8
  • 原文地址:https://www.cnblogs.com/taskctl/p/7070241.html
Copyright © 2011-2022 走看看