spring - 从 Spring Shell 执行 shell 命令

标签 spring spring-boot spring-shell

我有一个案例想问一下我可以用Spring Shell解决吗? 我有一个 main.jar 应用程序,它在 Wildly 服务器上部署了几个计划的 Spring 作业。就我而言,我无法停止或重新部署 main.jar,因为必须不间断地提供服务。

我需要一种从终端启动/停止/重启计划的 Spring 作业的方法。例如,在 Apache Karaf 中有一个 shell,我可以通过 telnet 使用它。

在 Spring Shell 中是否有一些类似的解决方案,可以让我从 linux 终端执行命令。

最佳答案

对于简单的计划任务,spring/spring-boot 中没有开箱即用的 CLI 控件。

您需要自己实现。

下面是一个简单示例,说明如何使用 spring shell 控制计划任务并将启动/停止方法公开到命令行。

让我们假设您有一个用于所有计划任务的通用接口(interface):

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 进程。

关于spring - 从 Spring Shell 执行 shell 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55626845/

相关文章:

spring - 如何使用 Vaadin + Spring 创建 MVP 架构?

java - 使用Gradle导入spring-integration-kafka时出错

java - 使用 spring-security 登录 Facebook

java - Windows 操作系统命令不在 Spring Shell 中执行

spring - 处理所有列出的异常,但使用 Spring 的 @ExceptionHandler 注释的异常除外

java - 如何在 Spring 批处理应用程序中创建 List 或 ArrayList 对象单例。如何在 java spring batch/boot 中将字段注释为单例

java - 如何将 Spring ObjectProvider 与多个 bean 定义一起使用

java - 当我构建maven单元测试时,出现以下错误

mongodb - 将 Spring-Shell 与 MongoDb 驱动程序集成

spring-shell - Spring Shell - 在执行 ShellMethod 过程中捕获用户输入