[英]process.waitFor() not returning
我想从 Postgres SQL 脚本迁移数据。 我正在使用下面的代码。
void importDatabase() {
final Process process = Runtime.getRuntime().exec("psql -f ./test.sql postgresql://postgres:root@127.0.0.1:5432/testdb");
//Wait to get exit value
try {
if (process.waitFor() != 0) {
String line;
BufferedReader input = new BufferedReader(new InputStreamReader(process.getErrorStream()));
while ((line = input.readLine()) != null) {
log.error(line);
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
waitFor
不返回任何东西,它只是永远等待。
注意:我的test.sql
有很多查询,所以它会显示很多日志条目。
题:
如何解决这个问题呢?
如果这与缓冲存储器有关,我该如何清除缓冲区?
谢谢你。
如果一个由Runtime.exec()
执行的进程产生输出——无论是stdout
到stdout
还是stderr
那么为了让它稳健运行,你需要在调用Process.waitFor()
之前开始使用输出。 最有可能的是,您的psql
进程被阻塞,因为它正在等待读取其输出的内容,并且在Process.waitFor()
完成之前您不会开始这样做。
您可能需要在单独的线程中使用输出,除非您确切知道预期的输出。 在任何情况下,您对psql
的调用可能有问题,也可能没有问题——除非您捕获它的输出,否则您可能不知道。
Runtime.exec()
健壮和便携使用非常困难。 我已经详细地写过这个,并附有代码示例,在这里:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.