使用tomcat在spring boot上读取控制台输入

时间:2017-04-10 05:32:55

标签: java linux spring tomcat spring-boot

是否可以在Spring Boot上的嵌入式tomcat启动之前读取控制台输入?所谓的应用程序流程是来自用户的请求用户名和密码,并且将用于启动应用程序。它在使用java -jar命令时有效,问题是当我关闭控制台(Linux上的SSH)时,进程停止。我尝试搜索它并发现该进程与控制台绑定,因此我尝试使用nohup,问题是我在使用时无法请求控制台输入。还有其他办法吗?

4 个答案:

答案 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>

资源链接: https://stackoverflow.com/a/12108646/2293534