Как остановить Jetty Server в Clojure?
Вопрос
Я пишу веб-приложение, используя кольцо и Clojure. Я использую адаптер причала для сервера разработки и Emacs / Slime для IDE. В то время как перезагрузка помогает, Run-Jetty блокирует мою сессию слизирования, и я хотел бы иметь возможность начать / остановить его без необходимости запустить его в отдельном сеансе терминала. В идеале я хотел бы определить серверный агент и функции Start-Server и Stop-Server, который начнет / остановить сервер внутри агента. Это возможно?
Решение
У меня обычно есть строка в моем кольцевом приложении, которое выглядит следующее:
(defonce server (run-jetty #'my-app {:port 8080 :join? false}))
Это предотвращает блокировку refl. Это также позволяет мне перекомпилировать этот файл, не беспокоясь о том, что мой сервер будет переопределен. Это также позволяет вам взаимодействовать в RECH так:
user=> (.stop server)
а также
user=> (.start server)
Другие советы
Документация пристанирования имеет некоторую информацию о изящное отключение присяга. Это, вероятно, недостаточно информации, но она может начать.
Я еще не начал играть с компиюром, но в целом я предпочитаю работать с Tomcat. Это более полнофункционально; Среди прочего, есть хорошо документированная API для запуска его и выключения его, он слушает команду отключения на выделенном порту; Существуют ant
Задачи для этого, и они, конечно, могут быть вызваны из приложения Java. Я просто не знаю, какая волшебная компиюра делает с подключением reft в запущенном экземпляре веб-контейнера, а если / как применяется автоматический класс Reloading ... Надеюсь, кто-то другой сможет предоставить больше информации.