我有一个案例,我想问我可以解决与Spring壳。我有一个Main.jar应用程序,它有几个部署在Wildly服务器上的Spring任务。在我的例子中,我不能停止或重新部署main.jar,因为必须不停地提供服务。
对于简单的计划任务,在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进程。
问题内容: 我正在尝试从GNU / Linux平台上的Java应用程序执行shell命令。问题是,尽管它可以从bash成功运行,但调用另一个Java应用程序的脚本永远不会结束。我试图调试它: 我尝试使用:ProcessBuilder(); 和Runtime.getRuntime()。exec(cmd); 看起来它正在等待完成。有任何想法吗? 谢谢,Laurențiu 问题答案: 您是否正在处理标准
问题内容: 我正在尝试在我编写并按下的应用程序中从应用程序仿真器终端(您可以在Google Play中找到它)执行此命令enter,因此请编写: 然后再次按,并使用的新功能开始录制屏幕。 因此,我尝试使用以下命令从Java执行相同的代码: 但是不起作用,因为未创建文件。显然,我在装有android kitkat的有根设备上运行。问题出在哪里?我该如何解决?因为从终端仿真器工作并且在Java中不行?
我正在尝试从jenkinsfile执行一组命令。问题是,当我尝试将stdout的值分配给变量时,它不起作用。我尝试了双引号和单引号的不同组合,但到目前为止没有运气。 在这里,我使用最新版本的jenkinsfile以及旧版本执行脚本。将shell命令放入 """ """ 不允许创建新变量,并给出client_name命令不存在的错误。 我想将命令p4客户端-e$client_name的标准输出分配给
我正试图从应用程序仿真器终端(您可以在google play中找到它)执行这个命令,在这个应用程序中我编写并按Enter,所以写:
我试图在我的网页中使用PHP从远程机器中的shell获得结果。我用了这些台词: 我试图得到结果在我的网页在windows机器和libssh2已经包含在easyphp. 有什么想法吗?
问题内容: 我仍在尝试掌握如何运行linux或Windows shell命令并在node.js中捕获输出的细节。最终,我想做这样的事情… 重要的一点是必须对全局范围的变量(或对象)可用。我尝试了以下功能,但是由于某种原因,我被打印到控制台了。 我很难理解代码在哪里突破了…该模型的非常简单的原型可以工作… 有人可以帮助我了解为什么有效,但是无效吗?FWIW,我需要使用,因为缓冲区限制为200KB。