我有一個Java項目,作爲一個服務器。當這個項目的一個實例運行時,我可以運行另一個實例。
我該如何避免在同一個java項目上同時運行多個實例? (檢測到另一個實例時停止服務器)我該如何避免在同一個java項目上同時運行多個實例?
回答
import java.net.ServerSocket;
.....
private static final int PORT = 9999;
private static ServerSocket socket;
public static void main(String[] args) {
try {
socket = new ServerSocket(PORT, 0, InetAddress.getByAddress(new byte[] { 127, 0, 0, 1 }));
{/*here write your own code taht must be run in the main*/}
} catch (BindException e) {
System.err.println("**********************************Already running.");
System.exit(1);
} catch (IOException e) {
System.err.println("************************************Unexpected error.");
e.printStackTrace();
System.exit(2);
} catch (Exception e) {
System.err.println("************************************ Error");
System.exit(3);
}
}
我用這個代碼和它的工作嘗試
+1好主意!我用這個解決方案看到的唯一問題是它不會允許不同的應用程序使用相同的端口。如果您記得爲每個應用程序分配另一個端口,那麼也可以。如果將端口保留在屬性文件中,則還可以重新配置端口並避免第三個應用程序出現問題。 – 2011-03-04 12:02:17
@Costis,這可能是一個安全的假設,所討論的軟件是服務器,很有可能會在特定的端口上列出某些東西。 – vickirk 2011-03-04 15:29:00
最簡單的方法是使用鎖定文件,如果應用程序崩潰,則會導致問題。嘗試將pid寫入鎖定文件,您可以檢查該pid是否存在(儘管不是本地可能在包裝器shell腳本中)。
如果你正在運行服務器,你可以不檢查一個端口是否打開,或者最好還是一個已知端口上的jmx實例。
您可以編寫用於應用程序啓動的簡單命令行腳本 - 該檢查是服務器在實際運行新實例之前運行的。只要用wget檢查url例如...
我完全支持@vickirk - 他的方法允許服務器的第二個「不需要」的實例變成「休眠」而不是簡單地終止,即定期運行以執行檢查如果「活動」實例仍然實際活動/存在,並且在發生故障時接管。
在分佈式情況下,如果要求跨越多臺計算機有一個服務器實例,則該方法仍然是找到可以在物理上或邏輯上鎖定的公共資源。爲此,我個人使用一個控制數據庫表,一個活動進程寫入其PID和「心跳」,其他所有人都在檢查該「心跳」是否相當近,如果不是,則會變爲活動狀態。
- 1. 如何避免類java的同一個實例正在運行多次
- 2. 蟒蛇 - 如何避免同一功能的多個運行實例
- 3. 避免運行多個實例
- 4. Android AsyncTask - 避免多個實例運行
- 5. 如何在同一個項目中運行多個Web API 2實例?
- 6. 多個項目在同一隊列在同一時間運行
- 7. 如何在同一實例上運行多個風暴拓撲?
- 8. 避免同一個JS文件的多個實例
- 9. 如何在同一個php文件運行多次時避免連接超時
- 10. 在同一臺機器上同時運行2個webdriver實例
- 11. 如何運行同一個java代碼的不同實例
- 12. 我如何避免同一張桌子上的多個連接?
- 13. 如何在Eclipse中啓動同一個Java項目的多個實例?
- 14. Akka是否同時運行同一事件的多個實例?
- 15. 同時運行多個Coldfusion項目
- 16. 如何避免兩個作業同時在Quartz中運行?
- 17. AS3:避免同一類別的多個實例
- 18. Android:避免同一活動的多個實例?
- 19. 在螞蟻中運行同一目標的多個實例
- 20. 同時運行在同一個JVM上運行的java程序?
- 21. 如何從列表中選擇隨機項目,同時避免在同一行中選取同一項目
- 22. 同時通過SQLAgent運行一個SSIS包的多個實例
- 23. Mysql,如何避免多個連接在同一張表上
- 24. 多個項目同一行
- 25. 在同一行上分配同一類別的多個實例
- 26. 在同一端口上運行多個Tomcat實例
- 27. 如何運行一個Django 1.6項目,其中多個實例運行在同一臺服務器上,使用同一個db後端?
- 28. 在同一時間運行cron的多個實例
- 29. 如何在Visual Studio中同時運行多個項目
- 30. 如何同時運行多個Flash CS6實例?
的接受了http://stackoverflow.com/questions/920386/how-to-allow-running-only-one-instance-of答案-a-java-program-at-a-time應該爲你工作。 – 2011-03-03 13:44:56
我試試這個答案它是正確的thx – 2011-03-04 10:09:51