Commit 1fe4c886 authored by 赵啸非's avatar 赵啸非

添加批量激活设备

parent c39f0647
...@@ -4,6 +4,8 @@ import com.mortals.framework.model.Context; ...@@ -4,6 +4,8 @@ import com.mortals.framework.model.Context;
import com.mortals.framework.service.ICRUDService; import com.mortals.framework.service.ICRUDService;
import com.mortals.xhx.module.app.model.AppPublishEntity; import com.mortals.xhx.module.app.model.AppPublishEntity;
import java.io.IOException;
/** /**
* AppPublishService * AppPublishService
* *
...@@ -15,5 +17,5 @@ import com.mortals.xhx.module.app.model.AppPublishEntity; ...@@ -15,5 +17,5 @@ import com.mortals.xhx.module.app.model.AppPublishEntity;
public interface AppPublishService extends ICRUDService<AppPublishEntity,Long>{ public interface AppPublishService extends ICRUDService<AppPublishEntity,Long>{
void active(AppPublishEntity appPublishEntity, Context context); void active(AppPublishEntity appPublishEntity, Context context) throws IOException;
} }
\ No newline at end of file
package com.mortals.xhx.module.app.service.impl; package com.mortals.xhx.module.app.service.impl;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.RuntimeUtil;
import cn.hutool.core.util.ZipUtil; import cn.hutool.core.util.ZipUtil;
import com.mortals.framework.exception.AppException; import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
...@@ -17,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -17,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.util.Map; import java.util.Map;
...@@ -96,7 +96,7 @@ public class AppPublishServiceImpl extends AbstractCRUDServiceImpl<AppPublishDao ...@@ -96,7 +96,7 @@ public class AppPublishServiceImpl extends AbstractCRUDServiceImpl<AppPublishDao
} }
@Override @Override
public void active(AppPublishEntity appPublishEntity, Context context) { public void active(AppPublishEntity appPublishEntity, Context context) throws IOException {
if (AppTypeEnum.前端.getValue() == appPublishEntity.getAppType()) { if (AppTypeEnum.前端.getValue() == appPublishEntity.getAppType()) {
String targetFilePath = appPublishEntity.getFilePath(); String targetFilePath = appPublishEntity.getFilePath();
String disPath = "/home/publish/" + appPublishEntity.getAppCode(); String disPath = "/home/publish/" + appPublishEntity.getAppCode();
...@@ -112,7 +112,7 @@ public class AppPublishServiceImpl extends AbstractCRUDServiceImpl<AppPublishDao ...@@ -112,7 +112,7 @@ public class AppPublishServiceImpl extends AbstractCRUDServiceImpl<AppPublishDao
} }
ZipUtil.unzip(targetFilePath, disPath, Charset.forName(fileEncode)); ZipUtil.unzip(targetFilePath, disPath, Charset.forName(fileEncode));
} else { } else {
//后端部署 执行sh 脚本程序部署 //后端部署 执行sh 脚本程序部署
//解压到临时目录 //解压到临时目录
String targetFilePath = appPublishEntity.getFilePath(); String targetFilePath = appPublishEntity.getFilePath();
String fileEncode = "UTF-8"; String fileEncode = "UTF-8";
...@@ -123,8 +123,37 @@ public class AppPublishServiceImpl extends AbstractCRUDServiceImpl<AppPublishDao ...@@ -123,8 +123,37 @@ public class AppPublishServiceImpl extends AbstractCRUDServiceImpl<AppPublishDao
} }
String disPath = "/home/temp/"; String disPath = "/home/temp/";
ZipUtil.unzip(targetFilePath, disPath, Charset.forName(fileEncode)); ZipUtil.unzip(targetFilePath, disPath, Charset.forName(fileEncode));
String scriptPath = "/home/temp/" + appPublishEntity.getAppCode() + "/deploy.sh";
// ProcessBuilder sh = new ProcessBuilder("sh", scriptPath);
ProcessBuilder sh = new ProcessBuilder("/bin/sh /home/temp/" + appPublishEntity.getAppCode() + "/deploy.sh");
asynExeLocalComand(null, sh);
//执行sh发布脚本 //执行sh发布脚本
RuntimeUtil.exec("/bin/sh /home/temp/"+appPublishEntity.getAppCode()+"/deploy.sh"); // RuntimeUtil.exec("/bin/sh /home/temp/"+appPublishEntity.getAppCode()+"/deploy.sh");
}
}
public void asynExeLocalComand(File file, ProcessBuilder pb) throws IOException {
// 不使用Runtime.getRuntime().exec(command)的方式,因为无法设置以下特性
// Java执行本地命令是启用一个子进程处理,默认情况下子进程与父进程I/O通过管道相连(默认ProcessBuilder.Redirect.PIPE)
// 当服务执行自身重启的命令时,父进程关闭导致管道连接中断,将导致子进程也崩溃,从而无法完成后续的启动
// 解决方式,(1)设置子进程IO输出重定向到指定文件;(2)设置属性子进程的I/O源或目标将与当前进程的相同,两者相互独立
if (file == null || !file.exists()) {
// 设置属性子进程的I/O源或目标将与当前进程的相同,两者相互独立
pb.redirectOutput(ProcessBuilder.Redirect.INHERIT);
pb.redirectError(ProcessBuilder.Redirect.INHERIT);
pb.redirectInput(ProcessBuilder.Redirect.INHERIT);
} else {
// 设置子进程IO输出重定向到指定文件
// 错误输出与标准输出,输出到一块
pb.redirectErrorStream(true);
// 设置输出日志
pb.redirectOutput(ProcessBuilder.Redirect.appendTo(file));
} }
// 执行命令进程
pb.start();
} }
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment