package com.javaweb.quartz.task; import com.javaweb.common.config.Global; import com.javaweb.common.utils.StringUtils; import com.javaweb.framework.manager.AsyncManager; import com.javaweb.framework.manager.factory.AsyncFactory; import com.javaweb.quartz.config.DbParamConfig; import com.javaweb.quartz.service.ISysJobService; import com.javaweb.quartz.util.BatCommandUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; /** * 定时任务调度测试 * * @author ruoyi */ @Component("ryTask") public class RyTask { private static final Logger log = LoggerFactory.getLogger(RyTask.class); @Autowired DbParamConfig dbParamConfig; @Autowired ISysJobService jobService; private static String mysqlBasedir = null; private void initMysqlDir(){ if(mysqlBasedir==null){ mysqlBasedir = jobService.getMysqlBasedir(); } } public void recoverDBFile(String fileId) { log.info("------------------执行定时任务------------ryTask.recoverDBFile,参数:"+fileId); if(fileId.indexOf(".sql")==-1){ fileId = fileId+".sql"; } try { File sqlFile = new File(Global.getDbBackupPath()+fileId); if(!sqlFile.exists()){ log.error("数据库恢复时录入的文件id值不存在:"+fileId); return; } initMysqlDir(); importDBFile(sqlFile.getPath()); } catch (Exception e) { e.printStackTrace(); log.error("执行数数据库恢复时发生异常:"+e.getMessage()); } } public void backupDB() { log.info("------------------执行定时任务------------ryTask.backupDB"); try { initMysqlDir(); //备份数据库 backup(Global.getDbBackupPath()); //默认清理操作30天的数据库备份文件 final Integer days=30; final String folder= Global.getDbBackupPath(); AsyncManager.me().execute(AsyncFactory.cleanOutDateBackupFile(days,folder)); } catch (Exception e) { log.error("执行数据库备份时发生异常:"+e.getMessage()); } } //===============================================内部方法========================================= private void importDBFile(String filePath) throws IOException{ StringBuilder cmdStr = new StringBuilder(); cmdStr.append(" -u").append(dbParamConfig.getUsername()) .append(" -p").append(dbParamConfig.getPassword()) .append(" -h").append(dbParamConfig.getHost()) .append(" -P").append(dbParamConfig.getPort()) .append(" ").append(dbParamConfig.getDatabaseName()) .append("<").append(filePath); if (isWindows()) { BatCommandUtil.writeAndExcute(Global.getDbBackupPath()+"recoverMysqlDb.bat",new StringBuilder() .append("cd /d ").append(mysqlBasedir).append("bin").append("\r\n") .append("mysql").append(cmdStr.toString()).toString()); } else { throw new RuntimeException("暂时只支持windows系统!"); } } /** * 备份数据库操作 * * @param fileBasePath 文保存件路径 * @return */ private void backup(String fileBasePath) throws IOException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss_SSS"); String name = dbParamConfig.getDatabaseName()+"_"+sdf.format(new Date())+".sql"; File sqlFile = BatCommandUtil.createFile(fileBasePath+File.separator+ name); StringBuilder cmdStr = new StringBuilder(); // 构建数据库备份参数 cmdStr.append(" -u").append(dbParamConfig.getUsername()) //注意:如果数据库密码为空,导不出来 .append(" -p").append(dbParamConfig.getPassword()) .append(" -h").append(dbParamConfig.getHost()) .append(" -P").append(dbParamConfig.getPort()) .append(" ").append(dbParamConfig.getDatabaseName()) .append(" ").append("--hex-blob")//使用十六进制符号转储二进制字符序列,防止乱码 .append(" > ").append(sqlFile.getPath()); if (isWindows()) { BatCommandUtil.writeAndExcute(fileBasePath+File.separator+"backupmysql.bat",new StringBuilder() .append("cd /d ").append(mysqlBasedir).append("bin").append("\r\n") .append("mysqldump").append(cmdStr.toString()).toString()); } else { throw new RuntimeException("暂时只支持windows系统!"); } } private static boolean isWindows() { return System.getProperty("os.name").indexOf("Windows") != -1; } //---------------------demo--------------------- public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i) { System.out.println(StringUtils.format("执行多参方法: 字符串类型{},布尔类型{},长整型{},浮点型{},整形{}", s, b, l, d, i)); } public void ryParams(String params) { System.out.println("执行有参方法:" + params); } public void ryNoParams() { System.out.println("执行无参方法"); } }