mirror of https://github.com/elunez/eladmin
代码优化
parent
468a092d21
commit
2853f394e7
|
@ -3,8 +3,11 @@ package me.zhengjie.modules.mnt.domain;
|
|||
import lombok.Data;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.bean.copier.CopyOptions;
|
||||
import org.hibernate.annotations.CreationTimestamp;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.io.Serializable;
|
||||
import java.sql.Timestamp;
|
||||
|
||||
/**
|
||||
* @author zhanghouying
|
||||
|
@ -19,8 +22,8 @@ public class App implements Serializable {
|
|||
* 应用编号
|
||||
*/
|
||||
@Id
|
||||
@Column(name = "id")
|
||||
private String id;
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 应用名称
|
||||
|
@ -64,6 +67,9 @@ public class App implements Serializable {
|
|||
@Column(name = "deploy_script")
|
||||
private String deployScript;
|
||||
|
||||
@CreationTimestamp
|
||||
private Timestamp createTime;
|
||||
|
||||
public void copy(App source){
|
||||
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import cn.hutool.core.bean.BeanUtil;
|
|||
import cn.hutool.core.bean.copier.CopyOptions;
|
||||
import javax.persistence.*;
|
||||
import java.io.Serializable;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author zhanghouying
|
||||
|
@ -19,20 +20,22 @@ public class Deploy implements Serializable {
|
|||
* 部署编号
|
||||
*/
|
||||
@Id
|
||||
@Column(name = "id")
|
||||
private String id;
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 应用编号
|
||||
*/
|
||||
@Column(name = "app_id")
|
||||
private String appId;
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "app_id")
|
||||
private App app;
|
||||
|
||||
/**
|
||||
* IP列表
|
||||
* 服务器
|
||||
*/
|
||||
@Column(name = "ip")
|
||||
private String ip;
|
||||
@ManyToMany
|
||||
@JoinTable(name = "mnt_deploy_server", joinColumns = {@JoinColumn(name = "deploy_id",referencedColumnName = "id")}, inverseJoinColumns = {@JoinColumn(name = "server_id",referencedColumnName = "id")})
|
||||
private Set<ServerDeploy> deploys;
|
||||
|
||||
public void copy(Deploy source){
|
||||
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
|
||||
|
|
|
@ -50,7 +50,7 @@ public class DeployHistory implements Serializable {
|
|||
* 部署编号
|
||||
*/
|
||||
@Column(name = "deploy_id",nullable = false)
|
||||
private String deployId;
|
||||
private Long deployId;
|
||||
|
||||
public void copy(DeployHistory source){
|
||||
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
|
||||
|
|
|
@ -8,5 +8,5 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
|||
* @author zhanghouying
|
||||
* @date 2019-08-24
|
||||
*/
|
||||
public interface AppRepository extends JpaRepository<App, String>, JpaSpecificationExecutor<App> {
|
||||
public interface AppRepository extends JpaRepository<App, Long>, JpaSpecificationExecutor<App> {
|
||||
}
|
||||
|
|
|
@ -8,5 +8,5 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
|||
* @author zhanghouying
|
||||
* @date 2019-08-24
|
||||
*/
|
||||
public interface DeployRepository extends JpaRepository<Deploy, String>, JpaSpecificationExecutor {
|
||||
public interface DeployRepository extends JpaRepository<Deploy, Long>, JpaSpecificationExecutor<Deploy> {
|
||||
}
|
||||
|
|
|
@ -59,7 +59,7 @@ public class AppController {
|
|||
@ApiOperation(value = "删除App")
|
||||
@DeleteMapping(value = "/{id}")
|
||||
@PreAuthorize("@el.check('app:del')")
|
||||
public ResponseEntity delete(@PathVariable String id){
|
||||
public ResponseEntity delete(@PathVariable Long id){
|
||||
appService.delete(id);
|
||||
return new ResponseEntity(HttpStatus.OK);
|
||||
}
|
||||
|
|
|
@ -66,7 +66,7 @@ public class DeployController {
|
|||
@ApiOperation(value = "删除Deploy")
|
||||
@DeleteMapping(value = "/{id}")
|
||||
@PreAuthorize("@el.check('deploy:del')")
|
||||
public ResponseEntity delete(@PathVariable String id){
|
||||
public ResponseEntity delete(@PathVariable Long id){
|
||||
deployService.delete(id);
|
||||
return new ResponseEntity(HttpStatus.OK);
|
||||
}
|
||||
|
@ -76,7 +76,7 @@ public class DeployController {
|
|||
@PostMapping(value = "/upload")
|
||||
@PreAuthorize("@el.check('deploy:edit')")
|
||||
public ResponseEntity upload(@RequestBody MultipartFile file, HttpServletRequest request, HttpServletResponse response)throws Exception{
|
||||
String id = request.getParameter("id");
|
||||
Long id = Long.valueOf(request.getParameter("id"));
|
||||
String fileName = "";
|
||||
if(file != null){
|
||||
fileName = file.getOriginalFilename();
|
||||
|
|
|
@ -31,7 +31,7 @@ public interface AppService {
|
|||
* @param id
|
||||
* @return
|
||||
*/
|
||||
AppDTO findById(String id);
|
||||
AppDTO findById(Long id);
|
||||
|
||||
/**
|
||||
* create
|
||||
|
@ -50,5 +50,5 @@ public interface AppService {
|
|||
* delete
|
||||
* @param id
|
||||
*/
|
||||
void delete(String id);
|
||||
void delete(Long id);
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ public interface DeployService {
|
|||
* @param id
|
||||
* @return
|
||||
*/
|
||||
DeployDTO findById(String id);
|
||||
DeployDTO findById(Long id);
|
||||
|
||||
/**
|
||||
* create
|
||||
|
@ -54,7 +54,7 @@ public interface DeployService {
|
|||
* @CacheEvict(allEntries = true)
|
||||
* @param id
|
||||
*/
|
||||
void delete(String id);
|
||||
void delete(Long id);
|
||||
|
||||
/**
|
||||
* 部署文件到服务器
|
||||
|
@ -62,7 +62,7 @@ public interface DeployService {
|
|||
* @param appId
|
||||
* @return
|
||||
*/
|
||||
public String deploy(String fileSavePath, String appId);
|
||||
public String deploy(String fileSavePath, Long appId);
|
||||
|
||||
/**
|
||||
* 查询部署状态
|
||||
|
|
|
@ -3,6 +3,7 @@ package me.zhengjie.modules.mnt.service.dto;
|
|||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.sql.Timestamp;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -52,4 +53,6 @@ public class AppDTO implements Serializable {
|
|||
*/
|
||||
private String deployScript;
|
||||
|
||||
private Timestamp createTime;
|
||||
|
||||
}
|
||||
|
|
|
@ -3,6 +3,9 @@ package me.zhengjie.modules.mnt.service.dto;
|
|||
import lombok.Data;
|
||||
import me.zhengjie.annotation.Query;
|
||||
|
||||
import java.sql.Timestamp;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author zhanghouying
|
||||
* @date 2019-08-24
|
||||
|
@ -15,4 +18,7 @@ public class AppQueryCriteria{
|
|||
*/
|
||||
@Query(type = Query.Type.INNER_LIKE)
|
||||
private String name;
|
||||
|
||||
@Query(type = Query.Type.BETWEEN)
|
||||
private List<Timestamp> createTime;
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package me.zhengjie.modules.mnt.service.dto;
|
|||
|
||||
import lombok.Data;
|
||||
import java.io.Serializable;
|
||||
import java.util.Set;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -16,16 +17,12 @@ public class DeployDTO implements Serializable {
|
|||
*/
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* 应用编号
|
||||
*/
|
||||
private String appId;
|
||||
private AppDTO app;
|
||||
|
||||
/**
|
||||
* IP列表
|
||||
* 服务器
|
||||
*/
|
||||
private String ip;
|
||||
|
||||
private Set<ServerDeployDTO> deploys;
|
||||
|
||||
/**
|
||||
* 服务状态
|
||||
|
|
|
@ -39,5 +39,5 @@ public class DeployHistoryDTO implements Serializable {
|
|||
/**
|
||||
* 部署编号
|
||||
*/
|
||||
private String deployId;
|
||||
private Long deployId;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package me.zhengjie.modules.mnt.service.impl;
|
||||
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import me.zhengjie.modules.mnt.domain.App;
|
||||
import me.zhengjie.modules.mnt.repository.AppRepository;
|
||||
import me.zhengjie.modules.mnt.service.AppService;
|
||||
|
@ -15,7 +14,6 @@ import org.springframework.data.domain.Pageable;
|
|||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Propagation;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
|
@ -47,7 +45,7 @@ public class AppServiceImpl implements AppService {
|
|||
}
|
||||
|
||||
@Override
|
||||
public AppDTO findById(String id) {
|
||||
public AppDTO findById(Long id) {
|
||||
Optional<App> app = appRepository.findById(id);
|
||||
ValidationUtil.isNull(app,"App","id",id);
|
||||
return appMapper.toDto(app.get());
|
||||
|
@ -56,7 +54,6 @@ public class AppServiceImpl implements AppService {
|
|||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public AppDTO create(App resources) {
|
||||
resources.setId(IdUtil.fastUUID());
|
||||
return appMapper.toDto(appRepository.save(resources));
|
||||
}
|
||||
|
||||
|
@ -72,7 +69,7 @@ public class AppServiceImpl implements AppService {
|
|||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void delete(String id) {
|
||||
public void delete(Long id) {
|
||||
appRepository.deleteById(id);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,8 +5,10 @@ import cn.hutool.core.date.DateUtil;
|
|||
import cn.hutool.core.util.IdUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import me.zhengjie.exception.BadRequestException;
|
||||
import me.zhengjie.modules.mnt.domain.App;
|
||||
import me.zhengjie.modules.mnt.domain.Deploy;
|
||||
import me.zhengjie.modules.mnt.domain.DeployHistory;
|
||||
import me.zhengjie.modules.mnt.domain.ServerDeploy;
|
||||
import me.zhengjie.modules.mnt.repository.DeployRepository;
|
||||
import me.zhengjie.modules.mnt.service.*;
|
||||
import me.zhengjie.modules.mnt.service.dto.*;
|
||||
|
@ -32,6 +34,7 @@ import java.io.IOException;
|
|||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author zhanghouying
|
||||
|
@ -74,7 +77,7 @@ public class DeployServiceImpl implements DeployService {
|
|||
}
|
||||
|
||||
@Override
|
||||
public DeployDTO findById(String id) {
|
||||
public DeployDTO findById(Long id) {
|
||||
Optional<Deploy> Deploy = deployRepository.findById(id);
|
||||
ValidationUtil.isNull(Deploy, "Deploy", "id", id);
|
||||
return deployMapper.toDto(Deploy.get());
|
||||
|
@ -83,7 +86,6 @@ public class DeployServiceImpl implements DeployService {
|
|||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public DeployDTO create(Deploy resources) {
|
||||
resources.setId(IdUtil.simpleUUID());
|
||||
return deployMapper.toDto(deployRepository.save(resources));
|
||||
}
|
||||
|
||||
|
@ -99,12 +101,12 @@ public class DeployServiceImpl implements DeployService {
|
|||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void delete(String id) {
|
||||
public void delete(Long id) {
|
||||
deployRepository.deleteById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String deploy(String fileSavePath, String id) {
|
||||
public String deploy(String fileSavePath, Long id) {
|
||||
return deployApp(fileSavePath, id);
|
||||
}
|
||||
|
||||
|
@ -113,14 +115,14 @@ public class DeployServiceImpl implements DeployService {
|
|||
* @param id
|
||||
* @return
|
||||
*/
|
||||
private String deployApp(String fileSavePath, String id) {
|
||||
private String deployApp(String fileSavePath, Long id) {
|
||||
|
||||
DeployDTO deploy = findById(id);
|
||||
if (deploy == null) {
|
||||
sendMsg("部署信息不存在", MsgType.ERROR);
|
||||
throw new BadRequestException("部署信息不存在");
|
||||
}
|
||||
AppDTO app = appService.findById(deploy.getAppId());
|
||||
AppDTO app = deploy.getApp();
|
||||
if (app == null) {
|
||||
sendMsg("包对应应用信息不存在", MsgType.ERROR);
|
||||
throw new BadRequestException("包对应应用信息不存在");
|
||||
|
@ -130,7 +132,9 @@ public class DeployServiceImpl implements DeployService {
|
|||
String uploadPath = app.getUploadPath();
|
||||
StringBuilder sb = new StringBuilder();
|
||||
String msg = "";
|
||||
String ip = deploy.getIp();
|
||||
Set<ServerDeployDTO> deploys = deploy.getDeploys();
|
||||
for (ServerDeployDTO deployDTO : deploys) {
|
||||
String ip = deployDTO.getIp();
|
||||
ExecuteShellUtil executeShellUtil = getExecuteShellUtil(ip);
|
||||
//判断是否第一次部署
|
||||
boolean flag = checkFile(executeShellUtil, app);
|
||||
|
@ -163,9 +167,9 @@ public class DeployServiceImpl implements DeployService {
|
|||
//只有过5秒才能知道到底是不是启动成功了。
|
||||
sleep(5);
|
||||
boolean result = checkIsRunningStatus(port, executeShellUtil);
|
||||
sb.append("服务器:").append(ip).append("<br>应用:").append(app.getName());
|
||||
sb.append("服务器:").append(deployDTO.getName()).append("<br>应用:").append(app.getName());
|
||||
sendResultMsg(result, sb);
|
||||
|
||||
}
|
||||
return "部署结束";
|
||||
}
|
||||
|
||||
|
@ -177,7 +181,7 @@ public class DeployServiceImpl implements DeployService {
|
|||
}
|
||||
}
|
||||
|
||||
private void backupApp(ExecuteShellUtil executeShellUtil, String ip, String fileSavePath, String appName, String backupPath, String id) {
|
||||
private void backupApp(ExecuteShellUtil executeShellUtil, String ip, String fileSavePath, String appName, String backupPath, Long id) {
|
||||
String deployDate = DateUtil.format(new Date(), DatePattern.PURE_DATETIME_PATTERN);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (!backupPath.endsWith(FILE_SEPARATOR)) {
|
||||
|
@ -241,12 +245,12 @@ public class DeployServiceImpl implements DeployService {
|
|||
|
||||
@Override
|
||||
public String serverStatus(Deploy resources) {
|
||||
String ip = resources.getIp();
|
||||
String appId = resources.getAppId();
|
||||
AppDTO app = appService.findById(appId);
|
||||
StringBuffer sb = new StringBuffer();
|
||||
ExecuteShellUtil executeShellUtil = getExecuteShellUtil(ip);
|
||||
sb.append("服务器:").append(ip).append("<br>应用:").append(app.getName());
|
||||
Set<ServerDeploy> serverDeploys = resources.getDeploys();
|
||||
App app = resources.getApp();
|
||||
for (ServerDeploy serverDeploy : serverDeploys) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
ExecuteShellUtil executeShellUtil = getExecuteShellUtil(serverDeploy.getIp());
|
||||
sb.append("服务器:").append(serverDeploy.getName()).append("<br>应用:").append(app.getName());
|
||||
boolean result = checkIsRunningStatus(app.getPort(), executeShellUtil);
|
||||
if (result) {
|
||||
sb.append("<br>正在运行");
|
||||
|
@ -256,6 +260,7 @@ public class DeployServiceImpl implements DeployService {
|
|||
sendMsg(sb.toString(), MsgType.ERROR);
|
||||
}
|
||||
log.info(sb.toString());
|
||||
}
|
||||
return "执行完毕";
|
||||
}
|
||||
|
||||
|
@ -277,14 +282,14 @@ public class DeployServiceImpl implements DeployService {
|
|||
*/
|
||||
@Override
|
||||
public String startServer(Deploy resources) {
|
||||
String ip = resources.getIp();
|
||||
String appId = resources.getAppId();
|
||||
AppDTO app = appService.findById(appId);
|
||||
Set<ServerDeploy> deploys = resources.getDeploys();
|
||||
App app = resources.getApp();
|
||||
for (ServerDeploy deploy : deploys) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
ExecuteShellUtil executeShellUtil = getExecuteShellUtil(ip);
|
||||
ExecuteShellUtil executeShellUtil = getExecuteShellUtil(deploy.getIp());
|
||||
//为了防止重复启动,这里先停止应用
|
||||
stopApp(app.getPort(), executeShellUtil);
|
||||
sb.append("服务器:").append(ip).append("<br>应用:").append(app.getName());
|
||||
sb.append("服务器:").append(deploy.getName()).append("<br>应用:").append(app.getName());
|
||||
sendMsg("下发启动命令", MsgType.INFO);
|
||||
executeShellUtil.execute(app.getStartScript());
|
||||
//停止3秒,防止应用没有启动完成
|
||||
|
@ -292,6 +297,7 @@ public class DeployServiceImpl implements DeployService {
|
|||
boolean result = checkIsRunningStatus(app.getPort(), executeShellUtil);
|
||||
sendResultMsg(result, sb);
|
||||
log.info(sb.toString());
|
||||
}
|
||||
return "执行完毕";
|
||||
}
|
||||
|
||||
|
@ -302,12 +308,12 @@ public class DeployServiceImpl implements DeployService {
|
|||
*/
|
||||
@Override
|
||||
public String stopServer(Deploy resources) {
|
||||
String ip = resources.getIp();
|
||||
String appId = resources.getAppId();
|
||||
AppDTO app = appService.findById(appId);
|
||||
Set<ServerDeploy> deploys = resources.getDeploys();
|
||||
App app = resources.getApp();
|
||||
for (ServerDeploy deploy : deploys) {
|
||||
StringBuffer sb = new StringBuffer();
|
||||
ExecuteShellUtil executeShellUtil = getExecuteShellUtil(ip);
|
||||
sb.append("服务器:").append(ip).append("<br>应用:").append(app.getName());
|
||||
ExecuteShellUtil executeShellUtil = getExecuteShellUtil(deploy.getIp());
|
||||
sb.append("服务器:").append(deploy.getName()).append("<br>应用:").append(app.getName());
|
||||
sendMsg("下发停止命令", MsgType.INFO);
|
||||
//停止应用
|
||||
stopApp(app.getPort(), executeShellUtil);
|
||||
|
@ -321,15 +327,16 @@ public class DeployServiceImpl implements DeployService {
|
|||
sendMsg(sb.toString(), MsgType.INFO);
|
||||
}
|
||||
log.info(sb.toString());
|
||||
}
|
||||
return "执行完毕";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String serverReduction(DeployHistory resources) {
|
||||
String deployId = resources.getDeployId();
|
||||
Long deployId = resources.getDeployId();
|
||||
Deploy deployInfo = deployRepository.findById(deployId).get();
|
||||
String deployDate = resources.getDeployDate();
|
||||
AppDTO app = appService.findById(deployInfo.getAppId());
|
||||
App app = deployInfo.getApp();
|
||||
if (app == null) {
|
||||
sendMsg("应用信息不存在:" + resources.getAppName(), MsgType.ERROR);
|
||||
throw new BadRequestException("应用信息不存在:" + resources.getAppName());
|
||||
|
|
Loading…
Reference in New Issue