jiangping
2024-11-07 4c2bae1c7e6f84699091a7e094120808137138dc
server/visits/admin_timer/src/main/java/com/doumee/api/DatabaseController.java
@@ -1,6 +1,8 @@
package com.doumee.api;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Date;
import com.doumee.core.utils.DateUtil;
import com.doumee.service.business.PlatformJobService;
@@ -12,7 +14,10 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
@@ -30,6 +35,8 @@
    @Autowired
    private PlatformJobService platformJobService;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @ApiOperation("数据库备份,保留最近7个备份sql")
@@ -37,11 +44,26 @@
    public ApiResponse backupDatabase() {
        try {
            String timestamp = DateUtil.getNowLongTime();
            String path = "/usr/local/jars/db/";
//            String path = "/usr/local/jars/db/";
//            String backupPath = path + timestamp + ".sql";
            String path = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MYSQL_BACKUP_DIR).getCode();
            String code = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.MYSQL_BACKUP_CDOE).getCode() ;
            String backupPath = path + timestamp + ".sql";
            // 使用mysqldump命令进行数据库备份
            Process process = Runtime.getRuntime().exec(new String[]{"mysqldump ", "-u", "root", "-p","Atwl@2024", "antaiwuliu", "-r", backupPath});
            process.waitFor();
            code= code.replace("${param}",backupPath);
            log.error("数据库备份================: " + code);
            ProcessBuilder builder = new ProcessBuilder(code);
            // 重定向错误流到标准输出流
            builder.redirectErrorStream(true);
            // stdout
            Process process = builder.start();
            new Thread(new ProcessHandleRunnable(process)).start();
            process.waitFor(); // wait if needed
      /*      // 使用mysqldump命令进行数据库备份
            Process process = Runtime.getRuntime().exec(code);
            process.getErrorStream();
            process.getInputStream();
            process.waitFor();*/
            // 检查备份是否成功
            if (new File(backupPath).exists()) {
@@ -58,6 +80,39 @@
        return ApiResponse.failed("数据库备份失败" );
    }
    static class ProcessHandleRunnable implements Runnable {
        private Process process;
        public ProcessHandleRunnable(Process process) {
            this.process = process;
        }
        public void run() {
            BufferedReader br = null;
            InputStreamReader reader = null;
            try {
                System.out.println("start run...");
                reader = new InputStreamReader(process.getInputStream());
                br = new BufferedReader(reader);
                String line = null;
                while ((line = br.readLine()) != null) {
                    System.out.println(line);
                }
                System.out.println("stop run...");
            } catch (IOException ex) {
                ex.printStackTrace();
            } finally {
                try {
                    if (br != null)
                        br.close();
                    if (reader != null)
                        reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    /**
     * @param path
     */