프로젝트 모듈 - 백업 데이터베이스
3719 단어 JAVA
com.jcraft
jsch
0.1.55
ExecuteShellUtil 도구 클래스
package me.zhengjie.modules.mnt.util;
import cn.hutool.core.io.IoUtil;
import com.jcraft.jsch.ChannelShell;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import lombok.extern.slf4j.Slf4j;
import java.io.*;
import java.util.Vector;
/**
* shell
*/
@Slf4j
public class ExecuteShellUtil {
private Vector stdout;
Session session;
public ExecuteShellUtil(final String ipAddress, final String username, final String password,int port) {
try {
JSch jsch = new JSch();
session = jsch.getSession(username, ipAddress, port);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
session.connect(3000);
} catch (Exception e) {
e.printStackTrace();
}
}
public int execute(final String command) {
int returnCode = 0;
ChannelShell channel = null;
PrintWriter printWriter = null;
BufferedReader input = null;
stdout = new Vector();
try {
channel = (ChannelShell) session.openChannel("shell");
channel.connect();
input = new BufferedReader(new InputStreamReader(channel.getInputStream()));
printWriter = new PrintWriter(channel.getOutputStream());
printWriter.println(command);
printWriter.println("exit");
printWriter.flush();
log.info("The remote command is: ");
String line;
while ((line = input.readLine()) != null) {
stdout.add(line);
System.out.println(line);
}
} catch (Exception e) {
e.printStackTrace();
return -1;
}finally {
IoUtil.close(printWriter);
IoUtil.close(input);
if (channel != null) {
channel.disconnect();
}
}
return returnCode;
}
public void close(){
if (session != null) {
session.disconnect();
}
}
public String executeForResult(String command) {
execute(command);
StringBuilder sb = new StringBuilder();
for (String str : stdout) {
sb.append(str);
}
return sb.toString();
}
}
Controller
@PostMapping
@ApiOperation(value = " ")
public ResponseEntityT create(@Validated @RequestBody YDatabaseBackupAdd resources){
String date = DateUtils.getNewDate().getTime() + "";
deployService.getBackupDatabase(resources.getBackupName(),date);
return new ResponseEntityT<>(yDatabaseBackupService.create(resources,date),HttpStatus.CREATED);
}
DeployServiceImpl
@Override
public String getBackupDatabase(String backup,String date) {
ExecuteShellUtil executeShellUtil = getExecuteShellUtil(ip);
//username
//password
//backupSQLUrl
final String sql = " mysqldump -u"+ username +" -p" + password + " --all-databases | gzip > " + backupSQLUrl + "" + backup +"_" + date + ".sql.gz";
executeShellUtil.execute(sql);
return " ";
}
/**
* ,
* @param ip ip
* @return
*/
private ExecuteShellUtil getExecuteShellUtil(String ip) {
ServerDeployDto serverDeployDTO = serverDeployService.findByIp(ip);
if (serverDeployDTO == null) {
sendMsg("IP :" + ip, MsgType.ERROR);
throw new BadRequestException("IP :" + ip);
}
return new ExecuteShellUtil(ip, serverDeployDTO.getAccount(), serverDeployDTO.getPassword(),serverDeployDTO.getPort());
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA 객체 작성 및 제거 방법정적 공장 방법 정적 공장 방법의 장점 를 반환할 수 있습니다. 정적 공장 방법의 단점 류 공유되거나 보호된 구조기를 포함하지 않으면 이불류화할 수 없음 여러 개의 구조기 파라미터를 만났을 때 구축기를 고려해야 한다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.