Я работаю над проектом Spring Shell. Инструмент представляет собой инструмент командной строки для управления данными в базе данных. Есть такие команды, как добавить пользователя (добавляет запись в таблицу базы данных). Для выполнения любых команд пользователь инструмента должен быть подключен к базе данных. Я хотел бы иметь возможность запускать все это в одной строке. Пользователь моего инструмента должен иметь возможность написать команду, подобную следующей.
--строка подключения к базе данных xyz --имя пользователя abc --пароль mno добавить пользователя --имя пользователя bob --role AA_ADMIN --company Microsoft
Здесь для запуска команды добавления пользователя требуются строка подключения к базе данных с тремя параметрами, имя пользователя и пароль.
Ниже я включил пример кода из справочной документации Spring Shell.
package commands;
import org.springframework.shell.core.CommandMarker;
import org.springframework.shell.core.annotation.CliAvailabilityIndicator;
import org.springframework.shell.core.annotation.CliCommand;
import org.springframework.shell.core.annotation.CliOption;
import org.springframework.stereotype.Component;
@Component
public class UserManipulation implements CommandMarker {
private boolean simpleCommandExecuted = false;
@CliAvailabilityIndicator({"hw simple"})
public boolean isSimpleAvailable() {
//always available
return true;
}
@CliAvailabilityIndicator({"hw complex", "hw enum"})
public boolean isComplexAvailable() {
if (simpleCommandExecuted) {
return true;
} else {
return false;
}
}
@CliCommand(value = "hw simple", help = "Print a simple hello world message")
public String simple(
@CliOption(key = { "message" }, mandatory = true, help = "The hello world message") final String message,
@CliOption(key = { "location" }, mandatory = false, help = "Where you are saying hello", specifiedDefaultValue="At work") final String location) {
simpleCommandExecuted = true;
return "Message = [" + message + "] Location = [" + location + "]";
}
@CliCommand(value = "hw complex", help = "Print a complex hello world message")
public String hello(
@CliOption(key = { "message" }, mandatory = true, help = "The hello world message") final String message,
@CliOption(key = { "name1"}, mandatory = true, help = "Say hello to the first name") final String name1,
@CliOption(key = { "name2" }, mandatory = true, help = "Say hello to a second name") final String name2,
@CliOption(key = { "time" }, mandatory = false, specifiedDefaultValue="now", help = "When you are saying hello") final String time,
@CliOption(key = { "location" }, mandatory = false, help = "Where you are saying hello") final String location) {
return "Hello " + name1 + " and " + name2 + ". Your special message is " + message + ". time=[" + time + "] location=[" + location + "]";
}
@CliCommand(value = "hw enum", help = "Print a simple hello world message from an enumerated value")
public String eenum(
@CliOption(key = { "message" }, mandatory = true, help = "The hello world message") final MessageType message){
return "Hello. Your special enumerated message is " + message;
}
enum MessageType {
Type1("type1"),
Type2("type2"),
Type3("type3");
private String type;
private MessageType(String type){
this.type = type;
}
public String getType(){
return type;
}
}
}
Итак, в настоящее время hw simple — это команда, которую необходимо выполнить перед запуском команды hw complex или hw enum. Я не хочу, чтобы hw simple был командой, вместо этого параметр сообщения в команде hw simple должен быть параметром, который требуется в качестве предварительного условия для запуска hw complex или hw enum. Так, например, команда, которую я хотел бы запустить.
--message hw complex --message abc --name1 def --name2 ghi --time 7:98 --location: Сиэтл
Кто-нибудь знает как это сделать? Если это невозможно сделать, я хотел бы услышать это или любые альтернативные идеи, если это возможно.