【问题标题】:Java Runtime exec() with mysqldump带有 mysqldump 的 Java 运行时 exec()
【发布时间】:2017-03-12 20:29:00
【问题描述】:

我对运行 mysqldump 时 Runtime 的 exec() 方法的行为有点好奇。我正在运行以下命令:

mysqldump --user=root --hex-blob [database name] -r [path to sql file]

我想知道的是,运行时在哪里搜索程序 mysqldump.exe?

我看到有些人在使用运行时执行 mysqldump.exe 时会提供整个文件路径。为什么是这样?

之所以好奇,是因为我有两种情况:

  1. 在一台 Windows 机器上,如果我打开运行并键入“cmd”,它将打开一个默认位置为 C:/ 的命令窗口。在这台机器上运行 mysqldump 命令可以工作。
  2. 在另一台 Windows 机器上,如果我打开运行并键入“cmd”,它将打开一个默认位置为 H:/ 的命令窗口。在这台机器上运行 mysqldump 命令失败。 Java 的运行时找不到文件 mysqldump.exe。

有没有可能两台windows机器有不同的默认驱动,如果我不提供mysqldump.exe的完整路径,系统会在默认驱动中查找?

提前致谢!

【问题讨论】:

  • 它们有相同的环境变量吗?
  • 是的,它们是一样的。

标签: java mysql runtime.exec


【解决方案1】:

documentation中提到的:

启动操作系统进程高度依赖系统。可能出错的许多事情包括:

  • 找不到操作系统程序文件。
  • 访问程序文件被拒绝
  • 工作目录不存在。

我建议以ProcessBuilder 开头,类似于:

 ProcessBuilder pb = new ProcessBuilder("mysqldump ...");
 Map<String, String> env = pb.environment();
 env.put("PATH", env.get("PATH") + ";Path/to/mysqldump");
 try {
    Process process = pb.start();
    //some code
 } catch(IOException e){
 }

这样可以确保正确设置环境变量。

【讨论】:

  • 如果两台机器上mysqldump的路径不同怎么办?
  • 然后将其作为参数传递给程序,从属性文件、配置文件中读取...您选择哪个更方便
猜你喜欢
  • 1970-01-01
  • 2016-03-06
  • 2012-01-25
  • 2012-12-16
  • 2016-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多