我使用下面的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”)?
请帮帮我。任何帮助或建议将非常感激。提前谢谢。
答案 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...