我有一个案例想问一下我可以用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/