Выполнять команды оболочки из Spring Shell - PullRequest
1 голос
/ 11 апреля 2019

У меня есть дело, которое я хочу спросить, могу ли я решить с помощью Spring Shell. У меня есть приложение main.jar с несколькими запланированными весенними заданиями, развернутыми на сервере Wildly. В моем случае я не могу остановить или повторно развернуть файл main.jar, поскольку служба должна предоставляться без остановок.

Мне нужен способ запуска / остановки / перезапуска запланированных весенних заданий из терминала. Например, в Apache Karaf есть оболочка, которую я могу использовать через telnet.

Есть ли в Spring Shell какое-то подобное решение, позволяющее мне выполнять команды с терминала linux.

1 Ответ

0 голосов
/ 11 апреля 2019

Для простых запланированных задач в Spring / spring-boot нет встроенного элемента управления CLI.

Вам нужно будет реализовать его самостоятельно.

Ниже приведен простой пример того, как вы можете управлять запланированными задачами и представлять методы запуска / остановки в командной строке с помощью Spring Shell.

Давайте рассмотрим, у вас есть общий интерфейс для всех запланированныхtasks:

public interface WithCliControl {
    void start();
    void stop();
}

Таким образом, простая запланированная задача будет выглядеть следующим образом:

@Component
public class MyScheduledTask implements WithCliControl {

    private AtomicBoolean enabled = new AtomicBoolean(true);

    @Scheduled(fixedRate = 5000L)
    public void doJob() {
        if (enabled.get()) {
            System.out.println("job is enabled");
            //do your thing
        }
    }

    @Override
    public void start() {
        enabled.set(true);
    }

    @Override
    public void stop() {
        enabled.set(false);
    }
}

, а соответствующий компонент CLI будет выглядеть следующим образом:

@ShellComponent
public class MyScheduledTaskCommands {

    private final MyScheduledTask myScheduledTask;

    public MyScheduledTaskCommands(final MyScheduledTask myScheduledTask) {
        this.myScheduledTask = myScheduledTask;
    }

    @ShellMethod("start task")
    public void start() {
        myScheduledTask.start();
    }

    @ShellMethod("stop task")
    public void stop() {
        myScheduledTask.stop();
    }
}

@ShellComponentи @ShellMethod подвергают методы процессу Spring Shell.

...