【FineReport】帆软调用服务器的kettle作业

1、编写自定义函数并编译

package com.fr.function;import ch.ethz.ssh2.ChannelCondition;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
import com.fr.script.AbstractFunction;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;import static com.fr.health.constants.ComponentHealthConstants.Status.TIME_OUT;public class CustomSubmitJobCommon extends AbstractFunction {@Overridepublic Object run(Object[] arg0) {return executeRemoteCommandCommon();}private String executeRemoteCommandCommon() {final String ipAddress = "127.0.0.1";     // 远程服务器主机ip final String username = "root";          //用户名final String password = "123456";   // 登录密码final String command = "cd /usr/kettle_task/N_steelmaking/ceshi/cb_ceshiv1 && ./cb_ceshiv1.sh";   //调用kettle作业的命令try{Connection conn = new Connection(ipAddress);conn.connect(); // 连接远程服务器if (!conn.authenticateWithPassword(username, password)) {System.err.printf("Failed to authenticate with username '%s' on server %s.", username, ipAddress);return "用户名或密码错误";}try {Session session = conn.openSession(); // 打开一个会话session.execCommand(command); // 执行cmd命令System.out.println(command);// Capture output and errorsInputStream stdOut = new StreamGobbler(session.getStdout());InputStream stdErr = new StreamGobbler(session.getStderr());// Read and potentially log stdout/stderrprintStream(stdOut, "STDOUT:");printStream(stdErr, "STDERR:");// Wait for the command to finish, with a timeoutint exitStatus = session.waitForCondition(ChannelCondition.EXIT_STATUS, TIME_OUT);if (exitStatus == TIME_OUT) {System.err.println("Command execution timed out.");return "执行失败";}return "执行成功";} finally {conn.close();}} catch (IOException e) {System.err.println("An error occurred during the SSH connection or command execution.");e.printStackTrace();return "连接失败";}}private void printStream(InputStream in, String streamType) {try (BufferedReader reader = new BufferedReader(new InputStreamReader(in))) {String line;while ((line = reader.readLine()) != null) {System.out.println(streamType + " " + line);}} catch (IOException e) {System.err.println("Error reading from stream: " + e.getMessage());}}public static void main(String[] args) {CustomSubmitJobCommon job = new CustomSubmitJobCommon();System.out.println(job.executeRemoteCommandCommon());}
}

2、新增按钮,并添加点击事件,点击按钮后即可执行命令调用kettle作业。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/26270.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【web APIs】快速上手Day02

文章目录 Web APIs - 第2天事件事件监听案例一 :京东点击关闭顶部广告案例二:随机点名案例拓展知识-事件监听版本 双击事件 事件类型鼠标事件综合案例-轮播图完整版 焦点事件综合案例-小米搜索框案例 键盘事件文本事件 事件对象综合案例-按下回车发布评论 环境对象回…

算法day27

第一题 515. 在每个树行中找最大值 首先是遍历每层的节点,将每一层最大值的节点的值保留下来,最后将所有层的最大值的表返回;具体的遍历每层节点的过程如上一篇故事; 综上所述,代码如下: /*** Definition …

数据结构与算法题目集(中文) 6-3 求链表的表长

该代码使用循环遍历链表来计算链表的长度。代码首先定义了一个整数变量i用于计数,并初始化为0。然后进入一个while循环,条件为链表L非空。在循环中,通过L L->Next来遍历链表中的每一个节点,并将计数变量i递增。最终返回计数变…

2024海南省大数据教师培训-Hadoop集群部署

前言 本文将详细介绍Hadoop分布式计算框架的来源,架构和应用场景,并附上最详细的集群搭建教程,能更好的帮助各位老师和同学们迅速了解和部署Hadoop框架来进行生产力和学习方面的应用。 一、Hadoop介绍 Hadoop是一个开源的分布式计算框架&…

文献解读-农业系列-第七期|《高粱驯化的基因组足迹和多种最终用途的育种选择》

关键词:高粱基因分析;基因组变异检测;全基因组重测序; 文献简介 标题(英文):Genomic footprints of sorghum domestication and breeding selection for multiple end uses标题(中文…

【Linux系统化学习】传输层——TCP协议

目录 预备知识 全双工协议 协议缓冲区 TCP协议 TCP协议格式 六个标志位 两个问题 确认应答机制 流量控制 超时重传机制 连接管理机制 CLOSE_WAIT状态 TIME_WAIT状态 滑动窗口 拥塞控制 延迟应答 捎带应答 粘包问题 TCP的异常情况 TCP小结 TCP/UDP协议对比…

MAC认证

简介 MAC认证是一种基于接口和MAC地址对用户的网络访问权限进行控制的认证方法,它不需要用户安装任何客户端软件。设备在启动了MAC认证的接口上首次检测到用户的MAC地址以后,即启动对该用户的认证操作。认证过程中,不需要用户手动输入用户名…

成都跃享未来教育抖音小店深度解析靠谱与否

在如今网络购物日益繁荣的时代,抖音小店以其独特的平台优势和庞大的用户基础,吸引了越来越多的商家入驻。成都跃享未来教育咨询有限公司便是其中之一,它的抖音小店究竟靠不靠谱呢?今天,我们就来一起揭开这个谜底。 首…

刷题训练之分治归并

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:熟练掌握分治归并算法。 > 毒鸡汤:学习,学习,再学习 ! 学,然后知不足。 > 专栏选自:刷…

神经气体生长算法【GNG】

当德国计算神经学家 Bernd Fritzke 在其 1995 年的开创性论文中提出后来被称为神经气体生长(GNG)的算法时,机器学习还是一个相对较新的领域,并且受到实际神经科学的极大启发。 当时,神经科学正处于一个突破性的时代—…

MySQL表设计经验汇总篇

文章目录 1、命名规范2、选择合适的字段类型3、主键设计要合理4、选择合适的字段长度5、优先考虑逻辑删除,而不是物理删除6、每个表都需要添加通用字段7、一张表的字段不宜过多8、定义字段尽可能not null9、合理添加索引10、通过业务字段冗余来减少表关联11、避免使…

电子元器件批发的几种模式

电子元器件的批发模式多种多样,以下是几种常见的模式: 传统批发模式:传统的电子元器件批发模式是指厂商或代理商通过与制造商签订合同,大批量购买元器件,并将其以较低的价格批发给零售商或其他中小型企业。这种模式通常…

【ARM Cache 及 MMU 系列文章 6.4 -- Cache miss 统计详细介绍】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 ARM Cache Miss 统计Cache 多层架构简介Cache 未命中的类型Cache 未命中统计Cache miss 统计代码实现Cache Miss 统计意义ARM Cache Miss 统计 在ARMv8/v9架构中,缓存未命中(Cache …

2. pytorch环境安装

概述 ​ 本文提供基于Anaconda环境Windows11操作系统的Pytorch深度学习环境的配置。深度学习环境分为GPU和CPU两大部分。使用GPU进行环境配置,需要保证电脑配有独立显卡,并且显卡驱动安装正常,详情见前文。 1. 创建新的虚拟环境用来配置Pyt…

DevExpress 控件和库

UI控件和组件 DevExpress WinForms包括以下Windows窗体库和控件: Grids and Editors Data Grid Tree List Vertical Grid Property Grid Gantt Control Data Editors and Simple Controls Office-inspired Ribbon, Bars and Menu Rich Text Editor Scheduler S…

什么是AIGC?AIGC是否会颠覆未来的内容生产模式?普通人如何利用好AI提高内容生产效率?

2024年是AI元年,正好我在AI公司里面工作,对AIGC有着几年的研究,接下来把我这对AIGC的学习经验毫无保留的给大家分享一下 AIGC 的简要介绍 在狭义上,AIGC是指利用AI自动生成内容的生产方式,比如自动写作、自动设计等。…

诊所管理系统有没有免费的?

随着消费市场的不断变化,消费型医疗领域逐渐受到重视,医疗机构面临激烈的行业竞争。为了提升诊所的经营管理效率和营销能力,选择一款合适的诊所管理系统变得尤为重要。然而,面对市场上众多的系统选择,如何找到适合自己…

在线课堂知识付费小程序源码系统 带完整的安装代码包以及搭建教程

系统概述 在线课堂知识付费小程序源码系统是基于当前主流技术栈开发的,支持微信小程序端的在线教育平台解决方案。它不仅包含了课程发布、在线学习、支付系统等基础功能,还融入了社区互动、用户管理、数据分析等高级特性,旨在打造一个全方位…

梯度提升树GBDT系列算法

Boosting方法的基本元素与基本流程💫 在Boosting集成算法当中,我们逐一建立多个弱评估器(基本是决策树),并且下一个弱评估器的建立方式依赖于上一个弱评估器的评估结果,最终综合多个弱评估器的结果进行输出…

01 Linux网络设置

目录 1.1 查看及测试网络 1.1.1 查看网络配置 1. 查看网络接口地址 1. 查看活动的网络接口设备 2. 查看指定的网络接口信息 2. 查看主机名称 3. 查看路由表条目 4. 查看网络连接情况 1.1.2 测试网络连接 1. 测试网络连通性 2. 跟踪数据包的路由途径 3. 测试DNS域名解析 1.2 设…