首页 > 代码库 > Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件

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;

  

  执行结果界面:

wKioL1QYCYfzuZzpAAIgt-iNz48024.jpg

 

Java代码调用Shell脚本并传入参数实现DB2数据库表导出到文件