使用Java代码停止运行服务器?

时间:2011-02-15 10:03:40

标签: java

我想停止在端口8080上运行的服务器。在我的java应用程序中,每当应用程序关闭时,也需要停止此服务器。但除了手动停止服务器外,我找不到任何解决方案。有没有办法停止带有代码的服务器?顺便说一句,我使用的是Windows 7

4 个答案:

答案 0 :(得分:1)

你是如何开始SymmetricDs的?作为Windows服务,作为WAR还是嵌入在您的应用程序中?

查看用户指南似乎如果您可以将其嵌入代码中,您应该能够直接启动和停止它。 user guide中的更多详细信息以及以下示例代码。

import org.jumpmind.symmetric.SymmetricWebServer;

public class StartSymmetricEngine {

    /**
     * Start an engine that is configured by two properties files. One is
     * packaged with the application and contains overridden properties that are
     * specific to the application. The other is found in the application's
     * working directory. It can be used to setup environment specific
     * properties.
     */
    public static void main(String[] args) throws Exception {

        SymmetricWebServer node = new SymmetricWebServer(
                                   "classpath://my-application.properties");

        // this will create the database, sync triggers, start jobs running
        node.start(8080);

        // this will stop the node
        node.stop();
    }   

}

答案 1 :(得分:0)

try {
    // Execute a command to terminate your server
    String command = "command to stop your server";
    Process child = Runtime.getRuntime().exec(command);

} catch (IOException e) {
}

答案 2 :(得分:0)

由于我没有看到代码,如何创建服务器和接受连接,如下所示 我已经给你以下ooptions.you应该尝试实施第一, 剩下的选择不会保证是否会杀死正确的程序。

  1.  public void stopServer()
    {
      threadReference.interrupt();
    }
    
    while(!Thread.interrupted())
    {
    
       //   Accept Server Connection
       try 
       {
        Thread.sleep(1000);
       } 
       catch(InterruptedException ex)  
       { 
         Thread.currentThread().interrupt(); 
       }
    }
    
    Runtime.getRunTime().addShutDownHook(new Thread()
    {
      public void run()
      {
        try 
        {  
          ref.stop();
        }  catch (IOException e)  
        { 
          // close server socket
          // other clean up 
          e.printStackTrace();  
        }  
      }
    });
    
  2. 你需要在Runtime.getRuntime() TASKKILL / F / IM 中指定它,或者有一个 jps ,最好杀死相关进程。< / p>

    try
    
         

    {

    Process p = Runtime.getRuntime().exec("TASKKILL /F /IM  communicator*"); 
    BufferedReader in = 
    new BufferedReader(new  InputStreamReader(p.getInputStream()));
    
  3.     String result = null;  
        while ((result= in.readLine()) != null) {  
         if ( "SUCCESS".equals(result.substring(0,7))
         {
          break;
         }
        }  
    } catch (IOException e) 
    {  
       e.printStackTrace();  
    }  
    

答案 3 :(得分:0)

为什么不检查Cargo?它提供了一个Java API来启动/停止Java容器。您可以在主页中找到支持的容器列表。