使用Java Runtime执行docker下的mysqldump

Runtime直接使用 docker exec mysql mysqldump -u%s -p%s cblog > %s(%s是需要填充的数据),命令无法执行并且不会报错,需要使用字符串数组加入"sh", "-c",具体代码示例:

java 复制代码
    /**
     * MySQL数据备份
     *
     * @param dataPath 备份文件的保存路径
     * @throws IOException
     */
    private void backupData(String dataPath) throws IOException {
        long start = System.currentTimeMillis();
        String cmd = String.format("docker exec mysql mysqldump -u%s -p%s cblog > %s", dataSourceProperties.getUsername(), dataSourceProperties.getPassword(), dataPath);
        String[] cmds = {"sh", "-c", cmd};
        log.debug("欲执行命令:{}", cmd);
        try (InputStream inputStream = Runtime.getRuntime().exec(cmds).getInputStream();
             InputStreamReader inputStreamReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
             BufferedReader bufferedReader = new BufferedReader(inputStreamReader);) {
            String line = bufferedReader.readLine();
            while (line != null) {
                log.debug(line);
                line = bufferedReader.readLine();
            }
        }
        long end = System.currentTimeMillis();
        log.info("mysql备份命令执行成功,耗时:{}ms", end - start);
    }
相关推荐
念九_ysl18 分钟前
Java 使用 OpenHTMLToPDF + Batik 将含 SVG 遮罩的 HTML 转为 PDF 的完整实践
java·开发语言·pdf
yaoxin52112328 分钟前
124. Java 泛型 - 有界类型参数
java·开发语言
Spirit_NKlaus30 分钟前
解决HttpServletRequest无法获取@RequestBody修饰的参数
java·spring boot·spring
不死的精灵37 分钟前
【Java21】在spring boot中使用ScopedValue
java·spring boot·后端
企鹅侠客38 分钟前
实践篇:14-构建 Node.js 应用程序镜像
docker·node.js·dockerfile
勤奋的知更鸟1 小时前
Java 编程之模板方法模式
java·开发语言·模板方法模式
做一个AC梦1 小时前
Docker安装失败:Docker Desktop installation failed
运维·docker·容器
Shan12051 小时前
浅谈Docker Kicks in的应用
运维·docker·容器
Li&&Tao1 小时前
docker 常用命令
docker·容器·eureka
逸风尊者1 小时前
开发易掌握的知识:GeoHash查找附近空闲车辆
java·后端