我有一个案例,我想问一下,我能用Spring Shell解决吗?我有一个main.jar应用程序,它在广泛的服务器上部署了几个预定的Spring Job。在我的例子中,我不能停止或重新部署main.jar,因为必须不间断地提供该服务。
我需要一种从终端启动/停止/重新启动计划的Spring Job的方法。例如,在Apache Karaf中,有一个我可以通过telnet使用的shell。
在Spring Shell中有没有类似的解决方案,可以让我从linux终端执行命令。
发布于 2019-04-11 22:36:42
对于简单的计划任务,在spring/spring-boot中没有现成的CLI控制。
你需要自己去实现它。
下面是一个简单的示例,展示了如何使用spring shell控制您的计划任务,并将start/stop方法公开给命令行。
假设您有一个用于所有计划任务的通用接口:
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进程公开这些方法。
https://stackoverflow.com/questions/55626845
复制相似问题