是否可以在Spring Boot上的嵌入式tomcat启动之前读取控制台输入?所谓的应用程序流程是来自用户的请求用户名和密码,并且将用于启动应用程序。它在使用java -jar
命令时有效,问题是当我关闭控制台(Linux上的SSH)时,进程停止。我尝试搜索它并发现该进程与控制台绑定,因此我尝试使用nohup
,问题是我在使用时无法请求控制台输入。还有其他办法吗?
答案 0 :(得分:8)
我认为这可以帮到你。
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// prompt for the user's name
System.out.print("Enter your name: ");
// get their input as a String
String username = scanner.next();
System.out.println(username);
SpringApplication.run(Application.class, args);
}
答案 1 :(得分:2)
在执行java程序之前,在shell脚本中获取用户名和密码,并将它们作为参数传递给您的应用程序。
#!/bin/bash
# Ask login details
read -p 'user: ' uservar
read -sp 'password: ' passvar
echo
现在您拥有用户和密码,您可以使用nohup运行java命令并将用户密码作为jvm属性传递。您还可以将用户和密码作为程序参数传递,如其他答案所示。
赞nohup java -jar abc.jar -Duser=$user -Dpassword=$password
使用
获取这些属性 String user = System.getProperty("String");
String password = System.getProperty("password");
答案 2 :(得分:1)
你可以使用nohup用参数启动jar,它们不会在终端的新行上提示它们。用户可以在启动jar时将它们添加为参数。请参阅下面的详细信息。
示例:
主要类
public static void main(String[] args) {
String username = args[0];
String password = args[1];
if(username.equals("admin") && password.equals("password")) {
SpringApplication.run(NohupApplication.class, args);
} else {
System.out.println("You are not authorized to start this application.");
}
}
使用无效凭据
<强>命令强>
nohup java -jar example.jar user password
<强>的nohup.out 强>
You are not authorized to start this application.
使用有效凭据
<强>命令强>
nohup java -jar example.jar admin password
<强>的nohup.out 强>
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.5.2.RELEASE)
答案 3 :(得分:1)
如果您希望使用控制台输入完整记录,例如 logger + System.out.println()输出,那么您必须使用
nohup java -jar yourJarFile.jar admin password >> fullLogOutput.log &
问题是我关闭控制台(Linux上的SSH)的过程 停止。
因此,您希望将jar文件作为后台进程运行。关闭控制台后,您无法停止此操作。只需在完整命令后添加&amp; 符号,它就不会停止。您可以使用以下命令。
nohup java -jar yourJarFile.jar &
使用控制台输出获取完整日志
nohup java -jar yourJarFile.jar >> fullLogOutput.log &
&amp; 符号用于在后台运行程序。
nohup实用程序使得作为参数传递的命令即使在您注销后也会在后台运行。
要停止后台进程,请使用ps -aux
获取ID然后终止(ID号)
ps -aux | grep yourJarFile.jar
您将获得身份证号码。杀了那个
sudo kill -9 <pid>