Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / 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 + " ");                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 +  " ");                        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() + " ");            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;执行结果界面:大话设计模式(带目录完整版) PDF+源代码 http://www.linuxidc.com/Linux/2014-08/105152.htmJava中介者设计模式 http://www.linuxidc.com/Linux/2014-07/104319.htmJava 设计模式之模板方法开发中应用 http://www.linuxidc.com/Linux/2014-07/104318.htm设计模式之 Java 中的单例模式(Singleton) http://www.linuxidc.com/Linux/2014-06/103542.htm本文永久更新链接地址:http://www.linuxidc.com/Linux/2014-10/107914.htm