Этот замечательный Spring Shell | OTUS
⚡ Подписка на курсы OTUS!
Интенсивная прокачка навыков для IT-специалистов!
Подробнее

Курсы

Программирование
Team Lead Архитектура и шаблоны проектирования Разработчик IoT C# Developer. Professional PostgreSQL Подготовка к сертификации Oracle Java Programmer (OCAJP) C# ASP.NET Core разработчик
-5%
Kotlin Backend Developer
-8%
iOS Developer. Professional
-8%
Symfony Framework Unity Game Developer. Basic JavaScript Developer. Professional Android Developer. Basic JavaScript Developer. Basic Java Developer. Professional Highload Architect Reverse-Engineering. Professional Java Developer. Basic PHP Developer. Professional Алгоритмы и структуры данных Framework Laravel Cloud Solution Architecture Vue.js разработчик Интенсив «Оптимизация в Java» Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив "Tarantool" PHP Developer. Basic
Инфраструктура
Мониторинг и логирование: Zabbix, Prometheus, ELK Дизайн сетей ЦОД Разработчик IoT PostgreSQL Экспресс-курс "Версионирование и командная работа с помощью Git"
-30%
Экспресс-курс «Введение в непрерывную поставку на базе Docker» Базы данных Reverse-Engineering. Professional Administrator Linux. Professional Network engineer Cloud Solution Architecture Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Супер-интенсив «СУБД в высоконагруженных системах» Супер-интенсив "Tarantool" Network engineer. Basic
Корпоративные курсы
Безопасность веб-приложений IT-Recruiter Дизайн сетей ЦОД Компьютерное зрение Разработчик IoT Вебинар CERTIPORT Machine Learning. Professional
-6%
NoSQL Пентест. Практика тестирования на проникновение Java QA Engineer. Базовый курс Руководитель поддержки пользователей в IT
-8%
SRE практики и инструменты Cloud Solution Architecture Внедрение и работа в DevSecOps Супер-практикум по работе с протоколом BGP Infrastructure as a code Супер-практикум по использованию и настройке GIT Промышленный ML на больших данных Экспресс-курс «CI/CD или Непрерывная поставка с Docker и Kubernetes» BPMN: Моделирование бизнес-процессов Основы Windows Server
Специализации Курсы в разработке Подготовительные курсы Подписка
+7 499 938-92-02

Этот замечательный Spring Shell

Spring_Deep_16.8-5020-e09334.png

В этой заметке хотим вас познакомить с замечательным проектом Spring Shell для создания CLI-интерфейса. Если для вашего проекта Web UI или UI на Swing слишком сложен, но хочется использовать все возможности Spring, то Spring Shell — прекрасное решение.

Задача — сделать приложение, которое говорит пользователю "Hello, ${username}"

Для начала создадим пустой проект на основе Spring Boot. Можем попробовать его собрать:

    mvnw clean install

И запустить:

    mvnw spring-boot:run

И, конечно, сначала добавим бизнес-логику HelloService:

    @Service
    public class HelloService {

        public String helloTo(String username) {
            return "Hello, " + username;
        }
    }

Добавим к этому сервису интерфейс из Spring Shell. Сначала maven-зависимость:

    <dependency>
        <groupId>org.springframework.shell</groupId>
        <artifactId>spring-shell-starter</artifactId>
        <version>2.0.1.RELEASE</version>
    </dependency>

Эта зависимость является, так называемым, «стартером». Вам необходимо добавить только её, а другие необходимые зависимости подключаются транзитивно. Хотим отметить, что этот «стартер» не является «Spring Boot-стартером», и может быть использован вне Spring Boot.

Попробуем запустить наше приложение:

    mvnw spring-boot:run

После некоторого вывода в консоль, мы увидим приглашение spring-shell.

    shell:>

Мы можем посмотреть список всех доступных команд:

    shell:>help
    AVAILABLE COMMANDS

    Built-In Commands
            clear: Clear the shell screen.
            exit, quit: Exit the shell.
            help: Display help about available commands.
            history: Display or save the history of previously run commands
            script: Read and execute commands from a file.
            stacktrace: Display the full stacktrace of the last error.

Круто! Попробуйте запустить clear. А также посмотрите историю команд:

    shell:>history
    help
    clear
    history

Как, ни странно, даже запуская тесты у нас тоже запустится shell-консоль:

    mvnw clean install
    ...
    shell:>

Чтобы в рамках тестов она не запускалась — сделаем некоторые правки:

    @RunWith(SpringRunner.class)
    @SpringBootTest(properties = {
       InteractiveShellApplicationRunner.SPRING_SHELL_INTERACTIVE_ENABLED + "=false",
       ScriptShellApplicationRunner.SPRING_SHELL_SCRIPT_ENABLED + "=false"
    })
    public class SpringShellDemoApplicationTests {

Вот, теперь мы готовы к тому, чтобы реализовать консольный интерфейс к нашей логике:

    @ShellComponent
    public class HelloShell {

        private final HelloService helloService;

        public HelloShell(HelloService helloService) {
            this.helloService = helloService;
        }

        @ShellMethod(key = "hello-to", value = "Say hello to username")
        public String helloTo(@ShellOption({"username", "u"}) String username) {
            return helloService.helloTo(username);
        }
    }

Испытаем в деле?

    shell:>help
    AVAILABLE COMMANDS

    ...

    Hello Shell
            hello-to: Say hello to username

Да, обратите внимание на description группы команд и самой команды. Если мы введём неполную команду, то получим:

    shell:>hello-to
    Parameter 'username string' should be specified
    Details of the error have been omitted. You can use the stacktrace command to print the full stacktrace.

Ну и, наконец:

    shell:>hello-to Ivan
    Hello, Ivan

С приведённым кодом можно ознакомиться здесь. И не забывайте оставлять свои комментарии!

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться