Если вы используете Ubuntu, то следующее решение будет работать безупречно. Если вы находитесь в другом дистрибутиве и если ps -A
не работает, пожалуйста, найдите эквивалентный. Теперь поговорим о стратегии, как это делается ниже. Я хотел, чтобы мое приложение запускалось скриптом, так как оно содержит некоторые аргументы JVM. Поэтому, когда мое приложение будет запущено, скрипт также будет в списке активных процессов. После завершения запуска приложение определяет, присутствует ли мой файл сценария в списке активных процессов или нет. Если его там нет, приложение закрывается. Следующий пример, вероятно, даст вам представление о том, как реализовать то же самое с сервером конфигурации.
@Autowired
private ApplicationContext context;
@EventListener(ApplicationReadyEvent.class) // use in production
public void initiateStartup() {
try {
String shProcessName = "root-IDEA.sh";
String line;
boolean undesiredStart = true;
Process p = Runtime.getRuntime().exec("ps -A");
InputStream inputStream = p.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
while ((line = bufferedReader.readLine()) != null) {
if (line.contains(shProcessName)) {
undesiredStart = false;
break;
}
}
bufferedReader.close();
inputStreamReader.close();
inputStream.close();
if (undesiredStart) {
System.out.println("--------------------------------------------------------------------");
System.out.println("APPLICATION STARTED USING A DIFFERENT CONFIG. PLEASE START USING THE '.sh' FILE.");
System.out.println("CLOSING APPLICATION");
System.out.println("--------------------------------------------------------------------");
// close the application
int exitCode = SpringApplication.exit(context, (ExitCodeGenerator) () -> 0);
System.exit(exitCode);
}
System.out.println("APPLICATION STARTED CORRECTLY");
} catch (IOException e) {
e.printStackTrace();
}
}