|
|
|
|
@ -2,12 +2,87 @@ package com.cauc.deaudio;
|
|
|
|
|
|
|
|
|
|
import org.springframework.boot.SpringApplication;
|
|
|
|
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
|
|
|
|
import org.springframework.boot.CommandLineRunner;
|
|
|
|
|
import org.springframework.context.annotation.Bean;
|
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
import java.io.BufferedReader;
|
|
|
|
|
import java.io.InputStreamReader;
|
|
|
|
|
|
|
|
|
|
@SpringBootApplication
|
|
|
|
|
public class DeaudioApplication {
|
|
|
|
|
|
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(DeaudioApplication.class);
|
|
|
|
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
|
|
SpringApplication.run(DeaudioApplication.class, args);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Bean
|
|
|
|
|
public CommandLineRunner startSpleeterService() {
|
|
|
|
|
return args -> {
|
|
|
|
|
logger.info("正在启动Spleeter服务...");
|
|
|
|
|
|
|
|
|
|
// 检查Spleeter服务是否已经在运行
|
|
|
|
|
if (!isSpleeterServiceRunning()) {
|
|
|
|
|
// 启动Spleeter服务
|
|
|
|
|
startSpleeterServiceProcess();
|
|
|
|
|
logger.info("Spleeter服务启动完成,运行在端口5000");
|
|
|
|
|
} else {
|
|
|
|
|
logger.info("Spleeter服务已在运行");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
logger.info("DeAudio应用启动完成,运行在端口8081");
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private boolean isSpleeterServiceRunning() {
|
|
|
|
|
try {
|
|
|
|
|
ProcessBuilder processBuilder = new ProcessBuilder("netstat", "-an");
|
|
|
|
|
Process process = processBuilder.start();
|
|
|
|
|
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
|
|
|
|
|
|
|
|
|
|
String line;
|
|
|
|
|
while ((line = reader.readLine()) != null) {
|
|
|
|
|
if (line.contains(":5000") && line.contains("LISTENING")) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
process.waitFor();
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
logger.warn("检查Spleeter服务状态时出错: {}", e.getMessage());
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void startSpleeterServiceProcess() {
|
|
|
|
|
try {
|
|
|
|
|
// 构建启动Spleeter服务的命令
|
|
|
|
|
ProcessBuilder processBuilder = new ProcessBuilder(
|
|
|
|
|
"python", "spleeter_service.py"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// 设置工作目录为Spleeter服务所在目录
|
|
|
|
|
processBuilder.directory(new java.io.File("F:\\traeprojects\\DeAudio\\project"));
|
|
|
|
|
|
|
|
|
|
// 启动进程
|
|
|
|
|
Process process = processBuilder.start();
|
|
|
|
|
|
|
|
|
|
// 记录启动信息
|
|
|
|
|
logger.info("Spleeter服务进程已启动,PID: {}", process.pid());
|
|
|
|
|
|
|
|
|
|
// 添加关闭钩子,确保应用退出时关闭Spleeter服务
|
|
|
|
|
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
|
|
|
|
|
if (process.isAlive()) {
|
|
|
|
|
process.destroy();
|
|
|
|
|
logger.info("Spleeter服务已关闭");
|
|
|
|
|
}
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
logger.error("启动Spleeter服务失败: {}", e.getMessage());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|