2015-11-08 1 views
1

Как запустить MySQL в среде Windows и вернуться в командную строку, когда запуск завершен и запущен?Как запустить MySQL через Java в Windows и вернуть его?

Если я делаю

mysqld --defaults-file=... --console 

сервер запускается, но MYSQLD блоков в то время как она работает.

Предпосылкой для этого требования является то, что я хочу запустить MySQL из Java-программы (используя Runtime.getRuntime().exec(...)) и запустить другую программу, когда MySQL готов.

+0

Я бы начать «начать» и попытаться подключиться в выжидательную цикле –

+0

я пытался что путем запуска 'cmd/c start/B mysqld ...', но это не сработало ... – Benvorth

+3

Чтобы запустить сервер MySql, введите 'net start ' в командной строке. – Marichyasana

ответ

1

Я решил эту проблему, выполнив команду в своем собственном потоке и ждать, пока я не могу подключиться к серверу:

Thread runningThread = new Thread() { 
    @Override 
    public void run() { 
    String[] cmdArray = new String[3]; 
    cmdArray[0] = "mysqld.exe"; 
    cmdArray[1] = "--defaults-file=./my.ini"; 
    cmdArray[2] = "--console"; 
    try { 
     Process proc = Runtime.getRuntime().exec(cmdArray); 

     // read results 
     BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream())); 
     String line; 
     while ((line = br.readLine()) != null) { 
     System.out.println(line); 
     } 

     br = new BufferedReader(new InputStreamReader(proc.getErrorStream())); 
     while ((line = br.readLine()) != null) { 
     System.out.println(line); 
     } 
     try { 
     proc.waitFor(); 
     } catch (InterruptedException ex) { 
     ex.printStackTrace(); 
     } 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
    } 
}; 
runningThread.start(); 
while(!isMySQLRunning()) { 
    System.out.println("waiting for MySQL to start..."); 
} 

// ... 

private static boolean isMySQLRunning() { 
    String[] cmdArray = new String[7]; 
    cmdArray[0] = "mysqladmin.exe"; 
    cmdArray[1] = "-u"; 
    cmdArray[2] = "root"; 
    cmdArray[3] = "-pMyPassord"; 
    cmdArray[4] = "-P"; 
    cmdArray[5] = "3306"; 
    cmdArray[6] = "status"; 
    Vector<String> res = runCommand(cmdArray); // runCommand(): see above 
    if (res.size() > 0 && res.get(0).contains("Can't connect to MySQL server")) { 
    System.out.println("MySQLis not running."); 
    return false; 
    } else if (res.size() > 0 && res.get(0).contains("Uptime")) { 
    System.out.println("MySQLis running."); 
    return true; 
    } 
    System.out.println("MySQLis not running."); 
    return false; 
} 
Смежные вопросы