Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件
本文通过Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件,代码如下:
- import java.io.File;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.LineNumberReader;
- import java.util.HashMap;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import com.*.dmp.bean.AgentConfigInfo;
- import com.*.dmp.bean.MapKeys;
- import com.*.dmp.bean.RunStatus;
- import com.*.dmp.common.SpringUtils;
- public class ExportDataServiceDB2 {
- AgentConfigInfo agentConfigInfo = SpringUtils.getContext().getBean(AgentConfigInfo.class);
- private Logger LOG = LoggerFactory.getLogger(ExportDataServiceDB2.class);
- private StringBuffer resultMsg = new StringBuffer();
- String isOK = "0";
- private String exportShell = agentConfigInfo.getEXPORT_SHELL();
- // private String exportCMD = agentConfigInfo.getEXPORT_CMD();
- private StringBuffer exportFilePath = agentConfigInfo.getEXPORT_FILE_PATH();
- /**
- * @Title: ExportData
- * @Description: 调用Shell脚本实现db2数据的导出
- * @param dataMap
- * @throws IOException 对方法的参数进行描述
- * @return HashMap<String,String> 返回类型
- */
- public HashMap<String, String> ExportData(HashMap<String, String> dataMap) throws IOException {
- String dbSchema = dataMap.get("db_schema");
- String dbUser = dataMap.get("db_user");
- String dbPassword = dataMap.get("db_password");
- String tableName = dataMap.get("table_name");
- String interFile = dataMap.get("inter_file");
- String delimiter = dataMap.get("delimiter");
- String exportLimit = dataMap.get("export_limit");
- String filePath = mkDirectory(exportFilePath, interFile);
- dataMap.put("file_abs_path", filePath);
- String cmdPara = createExportShellParams(dbSchema, dbUser,
- dbPassword, tableName, filePath, delimiter, exportLimit);
- LOG.info("Export Parameters: " + cmdPara);
- resultMsg.append("Export Parameters: " + cmdPara + "\n");
- String cmd = exportShell + " " + cmdPara;
- Process ps = null;
- InputStreamReader isr = null;
- LineNumberReader input = null;
- String line = null;
- try {
- LOG.info("Run Command: " + cmd );
- resultMsg.append("Run Command: " + cmd + "\n");
- ps = Runtime.getRuntime().exec(cmd);
- isr = new InputStreamReader(ps.getInputStream()); // 使用Reader进行输入读取和打印
- input = new LineNumberReader(isr);
- while (null != (line = input.readLine())) {
- LOG.info(line);
- resultMsg.append(line);
- if (line.contains("failed") || line.contains("Failed") || line.contains("FAILED") || line.contains("错误")) {
- isOK = RunStatus.EXPORT_FAIL;
- dataMap.put("export_status", isOK);
- dataMap.put("proc_log", resultMsg.toString());
- // dataMap = packageResult(isOK, resultMsg.toString()); // 组装返回的消息
- return dataMap;
- } else {
- isOK = RunStatus.PROC_RUN_SUCCESS;
- }
- }
- // if (0 != ps.waitFor()) {
- // isOK = RunStatus.EXPORT_FAIL;
- // } else {
- // isOK = RunStatus.PROC_RUN_SUCCESS;
- // }
- } catch (IOException e) {
- LOG.error("Run the Command Exception: " + cmd + ": " + e.getMessage());
- resultMsg.append("Run the Command Exception: " + cmd + ": " + e.getMessage() + "\n");
- isOK = RunStatus.EXPORT_FAIL;
- } finally {
- if (null != input) {
- input.close();
- }
- if (null != isr) {
- isr.close();
- }
- if (null != ps) {
- ps.destroy();
- ps = null;
- }
- }
- dataMap.put("export_status", isOK);
- dataMap.put("proc_log", resultMsg.toString());
- // dataMap = packageResult(isOK, resultMsg.toString()); // 组装返回的消息
- return dataMap;
- }
- /**
- * @Title: createExportShellParams
- * @Description: 组装参数
- * @param msgId
- * @param dbSchema
- * @param dbUser
- * @param dbPassword
- * @param tableName
- * @param filePath
- * @param delimiter
- * @param exportLimit
- * @return String 返回类型
- * @throws
- */
- private String createExportShellParams(String dbSchema,
- String dbUser, String dbPassword, String tableName,
- String filePath, String delimiter, String exportLimit) {
- StringBuilder params = new StringBuilder();
- params.append(dbSchema + " ").append(dbUser + " ").append(dbPassword + " ")
- .append(tableName + " ").append(filePath + " ").append(delimiter + " ").append(exportLimit);
- return params.toString();
- }
- /**
- * @Title: mkDirectory
- * @Description: 根据配置的路径和文件名,判断文件路径是否存在,若不存在,则先创建,拼接导出文件绝对路径。
- * @param filePath
- * @param interFile
- * @return 对方法的参数进行描述
- * @return String 返回类型
- * @throws
- */
- private String mkDirectory(StringBuffer filePath, String interFile) {
- File file = new File(filePath.toString());
- if ( file.isDirectory() ) {
- if (filePath.toString().endsWith("/")) {
- filePath.append(interFile);
- } else {
- filePath.append("/").append(interFile);
- }
- } else {
- LOG.info("The file path is not exists, need to be created now. ");
- file.mkdir();
- if (filePath.toString().endsWith("/")) {
- filePath.append(interFile);
- } else {
- filePath.append("/").append(interFile);
- }
- }
- return filePath.toString();
- }
- /** 返回消息组装结果 */
- private HashMap<String, String> packageResult(String isOK, String resultMsg) {
- HashMap<String, String> hsmap = new HashMap<String, String>();
- hsmap.put(MapKeys.PROC_STATUS, isOK);
- hsmap.put(MapKeys.PROC_LOG, resultMsg);
- return hsmap;
- }
- }
传入的执行参数放入一个Map(HashMap<String, String> dataMap)中:
- /** EXPORT TEST */
- map.put("db_schema", "md");
- map.put("db_user", "root");
- map.put("db_password", "root");
- map.put("table_name", "inter_log");
- map.put("inter_file", "inter_log_20140915.avl");
- map.put("delimiter", "|");
- map.put("export_limit", "");
代码执行之后,将执行日志以及执行结果也存入该Map中一起返回:
- dataMap.put("export_status", isOK);
- dataMap.put("proc_log", resultMsg.toString());
- return dataMap;
执行结果界面:
Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件的更多相关文章
- Shell脚本实现DB2数据库表导出到文件
该Shell脚本用于实现将DB2数据库表导出到文件,将在另一篇博文<Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件>中通过Java代码实现调用该脚本并传入参数. #! ...
- [Python]在python中调用shell脚本,并传入参数-02python操作shell实例
首先创建2个shell脚本文件,测试用. test_shell_no_para.sh 运行时,不需要传递参数 test_shell_2_para.sh 运行时,需要传递2个参数 test_shell ...
- 用java代码调用shell脚本执行sqoop将hive表中数据导出到mysql
1:创建shell脚本 touch sqoop_options.sh chmod 777 sqoop_options.sh 编辑文件 特地将执行map的个数设置为变量 测试 可以java代码传参数 ...
- Java如何调用shell脚本的
有些时候会碰到这样的场景:java的功能里面要嵌入一个功能点,这个功能是通过是shell脚本实现的.这种时候就需要Java对脚本调用的支持了. 测试环境 Ubuntu16.04 i3-6100,12G ...
- 利用jmeter发起java请求调用shell脚本
1.创建maven项目 在pom文件中加入依赖: 2.在路径src/main/java下创建类,如类名shellclass 3. 创建jmet ...
- 向shell脚本中传入参数
写一个 程序名为 test.sh 可带参数为 start 和 stop 执行 test.sh start执行 start 内容的代码 执行 test.sh stop 执行 stop 内 ...
- shell脚本获取传入参数的个数
ts.sh #!/bin/bash echo $# 输出 [root@redhat6 ~]# ./ts.sh para1 [root@redhat6 ~]# ./ts.sh para1 para2 [ ...
- Java 调用 shell 脚本详解
这一年的项目中,有大量的场景需要Java 进程调用 Linux的bash shell 脚本实现相关功能. 从之前的项目中拷贝的相关模块和网上的例子来看,有个别的“陷阱”造成调用shell 脚本在某些特 ...
- python调用shell脚本时需要切换目录
最近遇到了一个问题,就是python代码调用shell脚本时,发现输入输出的文件,总是和自己预想的有偏差,但是单独在linux下执行命令的时候,却没有错误.后来发现是相对路径的问题,因为执行pytho ...
随机推荐
- 洛谷P1288 取数游戏II 题解 博弈论
题目链接:https://www.luogu.org/problem/P1288 首先,如果你的一边的边是 \(0\) ,那么你肯定走另一边. 那么你走另一边绝对不能让这条边有剩余,因为这条边有剩余的 ...
- jq常用动画fade slide
https://www.cnblogs.com/sandraryan/ hide(); <div class="box">big box</div> $(' ...
- UVa11400 - Lighting System Design——[动态规划]
题干略. 题意分析: 很容易理解一类灯泡要么全部换要么全不换,其实费用节省的主要原因是由于替换灯泡类型而排除了低压电压源,于是我们就可以推断出灯泡类型替换的原则: 对于两类灯泡a1和a2,a1可以被a ...
- zoj 2954 Hanoi Tower
Hanoi Tower Time Limit: 2 Seconds Memory Limit: 65536 KB You all must know the puzzle named "Th ...
- html(四)数据库curd操作与分页查询
数据库操作curd : 1.首先要建立项目处理好自己逻辑包: 其中util工具包中建立两个工具类 jdbc连接和page分页 DBUtil.java: db工具类就是用于连接数据库的jdbc架包,里面 ...
- [C++] 烦人的error LNK2019和error LNK2001
常见原因: 没有正确的设置引用的lib,新手常犯这个错误,这是最容易解决的问题. extern "C"的问题.如果C++写的dll要给C程序用,那么就要注意extern " ...
- 【React】 百度地图API
百度地图 开发文档 :http://lbsyun.baidu.com/index.php?title=jspopular 调用接口 需要 内置加载一个 百度api文件 使用自己的ak 申请一个 ...
- java 反射的概念
反射的引入: Object obj = new Student(); 若程序运行时接收到外部传入的一个对象,该对象的编译类型是Object,但程序又需要调用该对象运行类型的方法: 1.若编译和运行类型 ...
- P1016 高精度除法
题目描述 给你两个很大的正整数A和B,你需要计算A除以B的商和余数. 输入格式 输入一行包含两个正整数A和B,以一个空格分隔(A和B的位数都不超过 \(10^5\)) 输出格式 输出一行包含两个整数, ...
- HDU 1087 Super Jumping....(动态规划之最大递增子序列和)
Super Jumping! Jumping! Jumping! Problem Description Nowadays, a kind of chess game called “Super Ju ...