web-dev-qa-db-ja.com

Tomcatを使用したSpringBootでのコンソール入力の読み取り

スプリングブートに組み込まれたTomcatが起動する直前にコンソール入力を読み取ることは可能ですか?おそらくアプリケーションフローは、ユーザーにユーザー名とパスワードを要求することであり、それはアプリケーションを起動できるようにするために使用されます。 Java -jarコマンドを使用すると機能します。問題は、コンソール(LinuxではSSH)を閉じるとプロセスが停止することです。それについて検索してみたところ、プロセスがコンソールに関連付けられていることがわかったので、Nohupを使用してみました。問題は、それを使用するとコンソール入力を要求できないことです。他に方法はありますか?

10
Eldon Hipolito

これはあなたを助けることができると思います。

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);
}
8
utkusonmez

Javaプログラムを実行する前に、シェルスクリプトでユーザー名とパスワードを取得し、それらを引数としてアプリケーションに渡します。

#!/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
Vipin

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を取得し、(ID番号)を強制終了します。

ps -aux | grep yourJarFile.jar

ID番号を取得します。それを殺すために

Sudo kill -9 <pid>

リソースリンク:https://stackoverflow.com/a/12108646/2293534

1
SkyWalker

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)
1
Kyle Anderson