首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Spring shell执行Shell命令

从Spring shell执行Shell命令
EN

Stack Overflow用户
提问于 2019-04-11 15:24:36
回答 1查看 1.3K关注 0票数 3

我有一个案例,我想问一下,我能用Spring Shell解决吗?我有一个main.jar应用程序,它在广泛的服务器上部署了几个预定的Spring Job。在我的例子中,我不能停止或重新部署main.jar,因为必须不间断地提供该服务。

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

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

EN

回答 1

Stack Overflow用户

发布于 2019-04-11 22:36:42

对于简单的计划任务,在spring/spring-boot中没有现成的CLI控制。

你需要自己去实现它。

下面是一个简单的示例,展示了如何使用spring shell控制您的计划任务,并将start/stop方法公开给命令行。

假设您有一个用于所有计划任务的通用接口:

代码语言:javascript
运行
复制
public interface WithCliControl {
    void start();
    void stop();
}

因此,一个简单的计划任务将如下所示:

代码语言:javascript
运行
复制
@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组件将如下所示:

代码语言:javascript
运行
复制
@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进程公开这些方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55626845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档