在Java中运行进程
在我的Java应用程序中,我启动一个postgres进程来备份我的数据库在Java中运行进程,java,process,Java,Process,在我的Java应用程序中,我启动一个postgres进程来备份我的数据库 Thread thread = new Thread(() ->{ Process p; try{ p = Runtime.getRuntime().exec("cmd /c pg_dump -v -a -d "+database+" -h "+server+" -p "+port+" -U "+user+" -n public > " + fil
Thread thread = new Thread(() ->{
Process p;
try{
p = Runtime.getRuntime().exec("cmd /c pg_dump -v -a -d "+database+" -h "+server+" -p "+port+" -U "+user+" -n public > " + file.getPath());
p.waitFor();
}catch(Exception e){
return false;
}
});
此操作正常,备份文件已创建。但是当我的应用程序运行时,文件大小是0KB。在我关闭Java应用程序后,备份文件将保持正常大小
我不明白问题出在哪里,我猜它可能与
文件以及处理它的方式有关(我的猜测是基于代码中的文件.getPath()
)
但是,您还没有发布全部代码。。。所以,我唯一能做的就是猜测
使用预定义的文件名尝试相同的代码(例如c:\\myfilename.dmp
)
e、 g。
p=Runtime.getRuntime().exec(“cmd/c pg_dump-v-a-d”+数据库+“-h”+服务器+“-p”+端口+“-U”+用户+”-n public>c:\\myfilename.dmp”
它的行为如何?很抱歉,但我很难正确解释这一点
在我的应用程序中,我尝试使用PostgreSQL中的pg_dump创建一个数据库转储文件。如果我启动转储过程,则在关闭整个应用程序后将创建该文件
我希望我的解释可以理解
我试图预定义文件的路径。但也是同样的错误。我还使用了ProcessBuilder intead
问题是我在pg_dump命令中使用了-v选项。没有这个选项,它工作正常,文件将立即创建
这是详细输出的选项。下面是我的最后一个方法,它可以很好地工作:
Process process = new ProcessBuilder("pg_dump", "-a", "-d", database, "-h", server, "-p", port, "-U", user, "-f", file.getPath()).start();
process.waitFor();
请详细说明你的问题