Runtime.getRuntime()。exec在提示时传递参数

时间:2013-02-01 04:46:31

标签: java database postgresql process runtime.exec

我使用下面的java语句从java代码启动PostgreSQL服务器。我正在使用Runtime.getRuntime()。exec()方法来实现这一点。

 final Process startServer = Runtime.getRuntime().exec("PostgreQL -D data/dir/ start");

此处,当服务器启用SSL且密钥受密码保护时,在命令行中会提示输入密码(请参阅下面的行)。在这种情况下,我该如何传递密码。

Is server running?
starting server anyway
waiting for server to start......Enter PEM pass phrase:....

在提示时,我们是否可以选择将密码作为参数传递?或者在启动时在PostgreSQL中我们有任何传递keypassword的规定(比如 - “PostgreSQL -d data / dir / -keyPass password start”)?

请帮帮我。任何帮助或建议将非常感激。提前谢谢。

3 个答案:

答案 0 :(得分:3)

您可以打开进程的OutputStream并传递服务器将读取的密码,就像您输入密码来自STDIN一样。

final Process startServer = Runtime.getRuntime().exec("PostgreQL -D data/dir/ start");
PrintStream ps = new PrintStream(startServer.getOutputStream());
ps.println(passPhrase);

答案 1 :(得分:1)

上面提供的答案的一个替代方法是创建password文件。

(例如~/.pgpass文件(Windows上的%APPDATA%\ postgresql \ pgpass.conf)格式为:

hostname:port:database:username:password

答案 2 :(得分:1)

首先看看ProcessBuilder,它会让你的生活更轻松......

ProcessBuilder pb = new ProcessBuilder("PostgreQL", "-D", "data/dir/" "start");
Process p = pb.start();

InputStream is = p.getInputStream();
OutputStream os = p.getOutputStream();

// Create a separate thread to read the input as needed...
// Create a seperate thread to deal with the output as needed...