1. Введение
CRaSH — это повторно используемая оболочка, которая развертывается в JVM и помогает нам взаимодействовать с JVM.
В этом руководстве мы увидим, как установить CRaSH как отдельное приложение. Кроме того, мы встроим его в веб-приложение Spring и создадим несколько пользовательских команд.
2. Автономная установка
Давайте установим CRaSH как отдельное приложение, скачав дистрибутив с официального сайта CRaSH.
Структура каталогов CRaSH содержит три важных каталога cmd, bin
и conf:
Каталог bin
содержит автономные сценарии CLI для запуска CRaSH.
Каталог cmd
содержит все команды, которые он поддерживает из коробки. Кроме того, здесь мы можем разместить наши пользовательские команды. Мы рассмотрим это в следующих разделах этой статьи.
Чтобы запустить CLI, мы идем в bin
и запускаем автономный экземпляр либо с помощью файла crash.bat
, либо с помощью файла crash.sh:
3. Встраивание CRaSH в веб-приложение Spring
Давайте встроим CRaSH в веб-приложение Spring. Во-первых, нам понадобятся некоторые зависимости:
<dependency>
<groupId>org.crashub</groupId>
<artifactId>crash.embed.spring</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.crashub</groupId>
<artifactId>crash.cli</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.crashub</groupId>
<artifactId>crash.connectors.telnet</artifactId>
<version>1.3.2</version>
</dependency>
Мы можем проверить наличие последней версии в Maven Central .
CRaSH поддерживает как Java, так и Groovy, поэтому нам нужно добавить Groovy, чтобы скрипты Groovy работали:
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy</artifactId>
<version>3.0.0-rc-3</version>
</dependency>
Его последняя версия также находится в Maven Central .
Далее нам нужно добавить прослушиватель в наш web.xml:
<listener>
<listener-class>org.crsh.plugin.WebPluginLifeCycle</listener-class>
</listener>
Теперь, когда прослушиватель готов, давайте добавим свойства и команды в каталог WEB-INF
. Мы создадим каталог с именем crash
и поместим в него команды и свойства:
После развертывания приложения мы можем подключиться к оболочке через telnet:
telnet localhost 5000
Мы можем изменить порт telnet в файле crash.properties , используя свойство
crash.telnet.port
.
Кроме того, мы также можем создать bean-компонент Spring для настройки свойств и переопределения расположения каталогов команды:
<bean class="org.crsh.spring.SpringWebBootstrap">
<property name="cmdMountPointConfig" value="war:/WEB-INF/crash/commands/" />
<property name="confMountPointConfig" value="war:/WEB-INF/crash/" />
<property name="config">
<props>
<prop key="crash.telnet.port">5000</prop>
</props>
</property>
</bean>
4. CRaSH и Spring Boot
Раньше Spring Boot предлагал CRaSH в качестве встроенной продажи через удаленную оболочку:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-remote-shell</artifactId>
</dependency>
К сожалению, поддержка сейчас устарела. Если мы все еще хотим использовать оболочку вместе с приложением Spring Boot, мы можем использовать режим подключения. В режиме присоединения CRaSH подключается к JVM приложения Spring Boot вместо своего собственного:
crash.sh <PID>
Здесь < PID>
идентификатор процесса этого экземпляра JVM. Мы можем получить идентификаторы процессов для JVM, работающих на хосте, с помощью команды jps
.
5. Создание пользовательской команды
Теперь давайте создадим пользовательскую команду для нашей аварийной оболочки. Есть два способа создания и использования команд; один с использованием Groovy, а также с Java. Мы рассмотрим их один за другим.
5.1. Команда с Groovy
Во-первых, давайте создадим простую команду с Groovy:
class message {
@Usage("show my own message")
@Command
Object main(@Usage("custom message") @Option(names=["m","message"]) String message) {
if (message == null) {
message = "No message given...";
}
return message;
}
}
Аннотация @Command
помечает метод как команду, @Usage
используется для отображения использования и параметров команды, и, наконец, @Option
предназначена для передачи любых параметров команде.
Проверим команду:
5.2. Команда с Java
Давайте создадим такую же команду с Java:
public class message2 extends BaseCommand {
@Usage("show my own message using java")
@Command
public Object main(@Usage("custom message")
@Option(names = { "m", "message" }) String message) {
if (message == null) {
message = "No message given...";
}
return message;
}
}
Команда похожа на команду Groovy, но здесь нам нужно расширить org.crsh.command.BaseCommand.
Итак, давайте еще раз протестируем:
6. Заключение
В этом руководстве мы рассмотрели установку CRaSH в качестве отдельного приложения, встраивая его в веб-приложение Spring. Кроме того, мы создали пользовательские команды с помощью Groovy и Java.
Как всегда, код доступен на GitHub .