这是关于的后续问题
如何使用 Spring Shell 在 Spring Boot Web 应用程序中构建控制台命令?
根据上述问题的建议,我正在尝试 Spring Boot 远程 shell。
我按照这个文档创建了我的自定义命令,
但在现实世界的用例中,我们主要有参数和选项来命令。文档中没有提到如何定义它们,以便用户在运行命令时应该通过。
这在spring-shell中得到了很好的解释并且很容易做到。
http://docs.spring.io/spring-shell/docs/current/reference/htmlsingle/#simple-application
https://projects.spring.io/spring-shell/
但是我们不能将弹簧壳与弹簧靴一起使用。
对于此类用例,有哪些可靠的生产就绪解决方案?
更新:
在 CRaSH 文档上找到了解决方案
http://www.crashub.org/1.3/reference.html#developping_commands
登录到 shell 后,我可以在命令列表中看到 myCommand,但是当我运行命令时,
但我得到了例外
"Could not create command commandName instance".
我正在尝试在命令中使用 spring bean,所以我进行了自动装配,例如
package commands;
import org.crsh.cli.Argument;
import org.crsh.cli.Command;
import org.crsh.cli.Usage;
import org.crsh.cli.Option;
import org.crsh.cli.Required;
import org.crsh.command.BaseCommand;
import org.crsh.command.InvocationContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@Usage("My test computation commands.")
public class myCommand extends BaseCommand {
protected final Logger log = LoggerFactory.getLogger(getClass());
/**
*
*/
public Service1 service1;
/**
*
*/
public Service2 service2;
/**
* @param service1
* @param service2
*/
@Autowired
public myCommand(Service1 service1, Service2 service2) {
super();
this.service1 = service1;
this.service2 = service2;
}
@Usage("Test command")
@Command
public Map<String, Double> command1(InvocationContext<Object> context, @Usage("id") @Required @Argument int id)
throws Exception {
Map<String, Double> result = new HashMap<>();
result.put("key1", service1.compute(id));
result.put("key2", service2.compute(id));
return result;
}
}