package com.ruoyi.cmd; import com.ruoyi.utils.process.CmdUtils; import com.sun.jna.Platform; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContextInitializer; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.annotation.Order; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @Description: 外部程序启动 * @ClassName: startup * @Author: 刘苏义 * @Date: 2023年09月22日9:56:57 **/ @Slf4j(topic = "cmd") @Component public class startup implements ApplicationContextInitializer { //minio String minioName = "minio.exe"; @Value("${minio.accessKey}") String accessKey; @Value("${minio.secretKey}") String secretKey; @Value("${minio.path}") String path; @Value("${minio.enabled}") Boolean minioEnabled; //mediamtx String mediamtxName = "mediamtx.exe"; @Value("${mediamtx.enabled}") Boolean mediamtxEnabled; //redis String redisName = "redis-server.exe"; /** * 程序初始化启动redis * 刘苏义 * 2023/9/22 10:38:41 */ @Override public void initialize(ConfigurableApplicationContext applicationContext) { if (Platform.isWindows()) { String workingDir = System.getProperty("user.dir") + File.separator + "server" + File.separator + "redis"; String exePath = workingDir +File.separator+ redisName; List cmd = new ArrayList<>(); cmd.add(exePath); if (CmdUtils.isProcessRunning(redisName)) { // 进程已经在运行,结束该进程 CmdUtils.stopProcess(redisName); } // 启动后台进程 CmdUtils.commandStart(workingDir, redisName, cmd, null); // 启动cmd窗口 //String[] command = {"cmd", "/c", "start", exePath, "-H127.0.0.1:8000", "-o"}; //CmdUtils.commandStart(command); } } @PostConstruct @Order(1) public void init() { if (minioEnabled) { log.info("初始化启动minio"); if (Platform.isWindows()) { String workingDir = System.getProperty("user.dir") + File.separator + "server" + File.separator + "minio"; String exePath = workingDir + File.separator + minioName; Map env = new HashMap<>(); env.put("MINIO_ROOT_USER", accessKey); env.put("MINIO_ROOT_PASSWORD", secretKey); List cmd = new ArrayList<>(); cmd.add(exePath); cmd.add("server"); cmd.add(path); cmd.add("--console-address=0.0.0.0:9000"); cmd.add("--address=0.0.0.0:9001"); if (CmdUtils.isProcessRunning(minioName)) { // 进程已经在运行,结束该进程 CmdUtils.stopProcess(minioName); } // 启动后台进程 CmdUtils.commandStart(workingDir, minioName, cmd, env); // 启动cmd窗口 //String[] command = {"cmd", "/c", "start", exePath}; //CmdUtils.commandStart(command); } } if (mediamtxEnabled) { log.info("初始化启动mediaMTX"); if (Platform.isWindows()) { String workingDir = System.getProperty("user.dir") + File.separator + "server" + File.separator + "mediamtx"; String exePath = workingDir + File.separator + mediamtxName; String ymlPath = workingDir + File.separator + "mediamtx.yml"; List cmd = new ArrayList<>(); cmd.add(exePath); // cmd.add(ymlPath); if (CmdUtils.isProcessRunning(mediamtxName)) { // 进程已经在运行,结束该进程 CmdUtils.stopProcess(mediamtxName); } // 启动后台进程 CmdUtils.commandStart(workingDir, mediamtxName, cmd, null); // 启动cmd窗口 //String[] command = {"cmd","/c","start",exePath,ymlPath}; //CmdUtils.commandStart(command); } } } @PreDestroy public void destroy() { if (minioEnabled) { log.info("销毁minio"); if (CmdUtils.isProcessRunning(minioName)) { // 进程已经在运行,结束该进程 CmdUtils.stopProcess(minioName); } } if (mediamtxEnabled) { log.info("销毁mediaMtx"); if (CmdUtils.isProcessRunning(mediamtxName)) { // 进程已经在运行,结束该进程 CmdUtils.stopProcess(mediamtxName); } } if (true) { log.info("销毁redis"); if (CmdUtils.isProcessRunning(redisName)) { // 进程已经在运行,结束该进程 CmdUtils.stopProcess(redisName); } } } }