1. 소개

CRaSH는 JVM에 배포하고 JVM과 상호 작용하는 데 도움이되는 재사용 가능한 쉘입니다.

이 예제에서는 CRaSH를 독립형 애플리케이션으로 설치하는 방법을 살펴 봅니다. 또한 Spring 웹 애플리케이션에 임베드하고 몇 가지 사용자 정의 명령을 작성합니다.

2. 독립형 설치

CRaSH의 공식 웹 사이트 에서 배포판을 다운로드하여 CRaSH를 독립 실행 형 애플리케이션으로 설치해 보겠습니다 .

CRaSH 디렉토리 구조에는 세 가지 중요한 디렉토리 cmd, bin 및  conf가 포함됩니다.

 

디렉토리는 독립 CLI 스크립트 충돌을 시작하는이 포함되어 있습니다.

cmd를  디렉토리는 상자 밖으로 지원하는 모든 명령을 보유하고 있습니다. 또한 여기에 사용자 지정 명령을 넣을 수 있습니다. 이 기사의 뒷부분에서 이에 대해 살펴 보겠습니다.

CLI를 시작하려면 bin으로 이동 하여 crash.bat 또는  crash.sh 를 사용하여 독립형 인스턴스를 시작합니다  .

3. 스프링 웹 애플리케이션에 CRaSH 포함

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

우리는에 텔넷 포트를 변경할 수 있습니다  crash.properties를  사용하여 파일  crash.telnet.port의 속성을.

또는 속성을 구성하고 명령의 디렉터리 위치를 재정의하기 위해 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는 원격 쉘을 통해 CRaSH를 임베디드 판매로 제공하는 데 사용되었습니다.

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

불행히도 지원은 이제 더 이상 사용되지 않습니다. Spring Boot 애플리케이션과 함께 셸을 계속 사용하려면 연결 모드를 사용할 수 있습니다. 연결 모드에서 CRaSH는 자체가 아닌 Spring Boot 애플리케이션의 JVM에 연결됩니다.

crash.sh <PID>

여기서 < PID> 는 해당 JVM 인스턴스의 프로세스 ID입니다. jps 명령을 사용하여 호스트에서 실행중인 JVM의 프로세스 ID를 검색 할 수 있습니다 .

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 웹 애플리케이션에 임베드하는 방법을 살펴 보았습니다. 또한 Java뿐만 아니라 Groovy로 사용자 지정 명령을 만들었습니다.

항상 그렇듯이 코드는 GitHub에서 사용할 수 있습니다 .