«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 применение. Во-первых, нам понадобятся некоторые зависимости:

Мы можем проверить наличие последней версии в Maven Central.

<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>

CRaSH поддерживает как Java, так и Groovy, поэтому нам потребуется добавить Groovy, чтобы скрипты Groovy заработали:

Его последняя версия также находится в Maven Central.

<dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy</artifactId>
    <version>3.0.0-rc-3</version>
</dependency>

Далее нам нужно добавить прослушиватель в наш web.xml:

Теперь, когда прослушиватель готов, давайте добавим свойства и команды в каталог WEB-INF. Мы создадим каталог с именем crash и поместим в него команды и свойства:

<listener>
    <listener-class>org.crsh.plugin.WebPluginLifeCycle</listener-class>
</listener>

После развертывания приложения мы можем подключиться к оболочке через telnet:

Мы можем изменить порт telnet при сбое. файл свойств с использованием свойства crash.telnet.port.

telnet localhost 5000

Кроме того, мы также можем создать bean-компонент Spring для настройки свойств и переопределения расположения каталогов команды: его удаленная оболочка:

К сожалению, поддержка устарела. Если мы все еще хотим использовать оболочку вместе с приложением Spring Boot, мы можем использовать режим подключения. В режиме присоединения CRaSH подключается к JVM приложения Spring Boot вместо своего собственного:

<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>

Здесь \u003cPID\u003e идентификатор процесса этого экземпляра JVM. Мы можем получить идентификаторы процессов для JVM, работающих на хосте, с помощью команды jps.

5. Создание пользовательской команды

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-remote-shell</artifactId>
</dependency>

Теперь давайте создадим пользовательскую команду для нашей аварийной оболочки. Есть два способа создания и использования команд; один с использованием Groovy, а также с Java. Мы рассмотрим их один за другим.

crash.sh <PID>

5.1. Команда с Groovy

Сначала давайте создадим простую команду с Groovy:

Аннотация @Command помечает метод как команду, @Usage используется для отображения использования и параметров команды, и, наконец, @Option предназначен для передачи любых параметров команде.

Протестируем команду:

5.2. Команда с Java

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;
    }
}

Давайте создадим такую ​​же команду с Java:

Команда похожа на команду Groovy, но здесь нам нужно расширить org.crsh.command.BaseCommand.

Итак, давайте проверим еще раз:

6. Заключение

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;
    }
}

В этом руководстве мы рассмотрели установку CRaSH как отдельного приложения, встраивая его в веб-приложение Spring. Кроме того, мы создали пользовательские команды с помощью Groovy и Java.

Как всегда, код доступен на GitHub.

«

In this tutorial, we looked in to installing CRaSH as a standalone application, embedding it in a Spring web application. Also, we created customs commands with Groovy as well as Java.

As always, the code is available over on GitHub.