使用tomcat在spring boot上读取控制台输入
Posted
技术标签:
【中文标题】使用tomcat在spring boot上读取控制台输入【英文标题】:Read Console input on spring boot with tomcat 【发布时间】:2017-09-05 01:13:24 【问题描述】:是否可以在 spring boot 上的嵌入式 tomcat 启动之前读取控制台输入?所谓的应用程序流程是,向用户请求用户名和密码,这将用于启动应用程序。它在使用java -jar
命令时有效,问题是当我关闭控制台(Linux 上的 SSH)时进程停止。我尝试搜索它并发现该进程与控制台相关联,所以我尝试使用nohup
,问题是我在使用时无法请求控制台输入。有没有其他办法?
【问题讨论】:
你能显示应用程序启动的命令吗?以及用户如何从命令行输入他的数据。 您想在应用程序启动前还是运行时阅读? 应该在应用程序启动之前。 【参考方案1】:如果您想使用控制台输入(如 logger + System.out.println() 输出)来完整记录日志,那么您必须使用
nohup java -jar yourJarFile.jar admin password >> fullLogOutput.log &
另一个问题:
问题是当我关闭控制台(Linux 上的 SSH)进程时 停下来。
所以你想将你的 jar 文件作为后台进程运行。您无法通过关闭控制台来阻止它。只需在完整命令后添加 & 符号,它不会停止。您可以使用以下命令。
nohup java -jar yourJarFile.jar &
使用控制台输出获取完整日志
nohup java -jar yourJarFile.jar >> fullLogOutput.log &
&符号用于在后台运行程序。
nohup 实用程序使作为参数传递的命令在后台运行,即使在您注销后也是如此。
停止/杀死后端进程:
要停止后台进程,使用ps -aux
获取id然后kill(id号)
ps -aux | grep yourJarFile.jar
你会得到身份证号码。杀死那个
sudo kill -9 <pid>
资源链接: https://***.com/a/12108646/2293534
【讨论】:
【参考方案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");
【讨论】:
【参考方案3】:您可以使用 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)
【讨论】:
【参考方案4】:我认为这可以帮助你。
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);
【讨论】:
你不应该也关闭扫描仪吗? @ImpulseTheFox 通常经验法则是始终关闭扫描仪。对于System.in
,情况略有不同。如果您关闭System.in
,您将无法在应用程序的生命周期内再次使用它。因此,如果您多次需要它,请将其保持打开状态。不过,这仅适用于System.in
。您仍然需要关闭其他所有内容。以上是关于使用tomcat在spring boot上读取控制台输入的主要内容,如果未能解决你的问题,请参考以下文章