Есть у меня приложение, оно постоянно работает (доступа в внешний мир не имеет), использует Spring. Иногда мне нужно посылать ему какие-либо команды, например, очистить внутренний кеш, что-нить пересчитать, и т.п.
Всякие премудрости мне не нужны, тупо отправить ему несколько команд из консоли, ну и смотреть ответ, что оно выведет.
Пока что мне в голову приходит только заюзать сокеты - встроить в приложение ServerSocket и коннектиться к нему. Но может что готовое уже есть?
1. MBean читаем тут docs.spring.io/spring/docs/current/spring-framewor...
Как результат получаем возможность управлять приложением например через jvisualvm и плагин mbean к нему. Довольно удобно.
2. Самый удобный для меня вариант, если используется spring boot. Тут можно развернуться на docs.spring.io/spring-boot/docs/current/reference/...
Как итог получаем возможность подключатся к приложению по ssh, реализовывать свои консольные команды. А также получаем служебный REST API с кучей встроенного функционала.
Есть еще костыльный вариант но тем неменее удобный во многих случаях.
Делаете обычный System.in\out консольный с нужными вам командами в самой софтине. Дальше пишете шеловый скрипт в котором описываете к пример start\stop\status\restart\exec(команда). Запуск софтины делать в screen с котором часть команд скрипта и будет работать. Софтину запускаете соответсвенно уже через этот скрипт.
На выходе получится следующее, штатно цепляетесь по ssh к серверу и дергаете этот скрипт как угодно. Так же в самом скрипте можно сделать автоматический рестарт софта если он упал.
Способ хоть действительно и костыльный но всетаки бывает очень удобным и за безопасность можно не переживать.