`
hongyong
  • 浏览: 16354 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论
  • songshuang: 您好~诚挚邀请您加入ITeye HTML5群组,交流分享HTM ...
    Html5

Java调用BAT

    博客分类:
  • Java
阅读更多

Java通过调用BAT启动程序,如果启动失败,则删除对应PID,重新启动。

  1. publicvoidrestart(){
  2. SimpleDateFormatm_sdfNowDate=newSimpleDateFormat("yyyyMMddHHmmss");
  3. //设定LOG文件。文件名格式为(日期.log)
  4. FilelogFile=newFile(m_sdfNowDate.format(Calendar.getInstance().getTime())+".log");
  5. try
  6. {
  7. log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":theprogramisstarting.");
  8. //取得配置文件
  9. ResourceBundlestats=ResourceBundle.getBundle("config");
  10. //取得重新启动的路径
  11. StringsRestartPath=stats.getString("restartPath");
  12. //取得重新启动的路径
  13. StringsRestartName=stats.getString("restartname");
  14. //取得第一次启动前停留时间
  15. longnTimeBeforRestart=Long.parseLong(stats.getString("timeBeforRestart"));
  16. //取得第二次启动前停留时间
  17. longnTimeBeforRestartSecond=Long.parseLong(stats.getString("timeBeforRestartSecond"));
  18. //取得第一次重启所需时间
  19. longnRestartTimeFirst=Long.parseLong(stats.getString("restartTimeFirst"));
  20. //取得第二次重启所需时间
  21. longnRestartTimeSecond=Long.parseLong(stats.getString("restartTimeSecond"));
  22. //取得PID档案所放置的位置
  23. StringsPidAdress=stats.getString("pidAdress");
  24. //PID档案集合
  25. StringarrayPidAdress[]=sPidAdress.split(",");
  26. //重启前PID代号集合
  27. StringarrayPidBefore[]=newString[arrayPidAdress.length];
  28. //重启后PID代号集合
  29. StringarrayPidAfter[]=newString[arrayPidAdress.length];
  30. StringspidGet="";
  31. //获取重启前PID的集合
  32. for(inti=0;i<arrayPidAdress.length;i++){
  33. BufferedReaderxBuffReadBefore=newBufferedReader(newInputStreamReader(newFileInputStream(arrayPidAdress[i]),"UTF-8"));
  34. StringsPidBefore=xBuffReadBefore.readLine();
  35. if(sPidBefore==null||sPidBefore.equalsIgnoreCase("")){
  36. arrayPidBefore[i]="0";
  37. }else{
  38. spidGet=spidGet+sPidBefore+":";
  39. arrayPidBefore[i]=sPidBefore;
  40. }
  41. xBuffReadBefore.close();
  42. }
  43. log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":thepidgetting:"+spidGet);
  44. log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":waitingbeforthefirsttimerunning.");
  45. //获取PID后,重启前等待时间
  46. Thread.currentThread().sleep(nTimeBeforRestart*1000);
  47. //第一次重新启动服务器
  48. Runtime.getRuntime().exec("cmd.exe/c"+"start/d"+sRestartPath+""+sRestartName);
  49. log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":runtherestartandbeginthefirsttimerunningwaiting.");
  50. //第一次启动等待时间
  51. Thread.currentThread().sleep(nRestartTimeFirst*1000);
  52. log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":afterthefirsttimewaiting.");
  53. //获取第一次启动后的PID的集合。
  54. for(inti=0;i<arrayPidAdress.length;i++){
  55. BufferedReaderxBuffReadAfter=newBufferedReader(newInputStreamReader(newFileInputStream(arrayPidAdress[i]),"UTF-8"));
  56. StringsPidAfter=xBuffReadAfter.readLine();
  57. if(sPidAfter==null||sPidAfter.equalsIgnoreCase("")){
  58. arrayPidAfter[i]="0";
  59. }else{
  60. arrayPidAfter[i]=sPidAfter;
  61. }
  62. xBuffReadAfter.close();
  63. }
  64. //默认设定为已经重新启动
  65. booleanboolRestartSucess=true;
  66. //通过PID判断是否成功启动
  67. for(inti=0;i<arrayPidBefore.length;i++){
  68. //因为前面已经如果获取的PID为空的情况设定为“0”,此处不处理为空的情况。
  69. if(arrayPidBefore[i].equalsIgnoreCase(arrayPidAfter[i])){
  70. boolRestartSucess=false;
  71. break;
  72. }
  73. }
  74. if(boolRestartSucess){
  75. //重启成功
  76. log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":thefirsttimerestartingisOK.");
  77. }else{
  78. //重启失败
  79. log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":thefirsttimerestartingisError.");
  80. //删除java.exeofPID
  81. for(inti=0;i<arrayPidAfter.length;i++){
  82. Runtime.getRuntime().exec("ntsd-cq-p"+arrayPidAfter[i]);
  83. Thread.currentThread().sleep(10000);
  84. }
  85. //第二次重启前等待时间
  86. log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":waitingbeforthesecondtimerunning.");
  87. Thread.currentThread().sleep(nTimeBeforRestartSecond*1000);
  88. //第二次重新启动服务器
  89. Runtime.getRuntime().exec("cmd.exe/c"+"start/d"+sRestartPath+""+sRestartName);
  90. log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":runtherestartandbeginthesecondtimerunningwaiting.");
  91. //第二次启动等待时间
  92. Thread.currentThread().sleep(nRestartTimeSecond*1000);
  93. log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":afterthesecondtimewaiting.");
  94. //获取第二次启动后的PID的集合。
  95. for(inti=0;i<arrayPidAdress.length;i++){
  96. BufferedReaderxBuffReadAfter=newBufferedReader(newInputStreamReader(newFileInputStream(arrayPidAdress[i]),"UTF-8"));
  97. StringsPidAfter=xBuffReadAfter.readLine();
  98. if(sPidAfter==null||sPidAfter.equalsIgnoreCase("")){
  99. arrayPidAfter[i]="0";
  100. }else{
  101. arrayPidAfter[i]=sPidAfter;
  102. }
  103. xBuffReadAfter.close();
  104. }
  105. //默认设定为已经重新启动
  106. booleanboolRestartSucessSecond=true;
  107. //通过PID判断是否成功启动
  108. for(inti=0;i<arrayPidBefore.length;i++){
  109. //因为前面已经如果获取的PID为空的情况设定为“0”,此处不处理为空的情况。
  110. if(arrayPidBefore[i].equalsIgnoreCase(arrayPidAfter[i])){
  111. boolRestartSucessSecond=false;
  112. break;
  113. }
  114. }
  115. if(boolRestartSucessSecond){
  116. //第二次重启成功。
  117. log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":thesecondtimerestartingisOK.");
  118. }else{
  119. //第二次重启失败。
  120. log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":thesecondtimerestartingisError.");
  121. }
  122. log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":theprogrameisover.");
  123. }
  124. }
  125. catch(Exceptione)
  126. {
  127. log(logFile,m_sdfNowDate.format(Calendar.getInstance().getTime())+":theprogramhassomeproblem:"+e.toString());
  128. }
  129. }
  130. publicvoidlog(Filefile,StringxsContent){
  131. try{
  132. FileOutputStreamfout=newFileOutputStream(file,true);
  133. Stringscontent=xsContent+"\n";
  134. byte[]b=scontent.getBytes();
  135. fout.write(b);
  136. fout.close();
  137. }catch(Exceptione){
  138. e.printStackTrace();
  139. }
  140. }
分享到:
评论

相关推荐

    java调用bat文件

    本文将深入探讨如何使用Java调用BAT文件,以及在这个过程中可能遇到的问题和解决方案。 首先,理解基本原理:Java通过`Runtime.getRuntime().exec()`方法来执行外部命令,这包括运行批处理文件。这个方法允许Java...

    java调用bat批处理与sh脚本

    这篇博客“java调用bat批处理与sh脚本”将详细讲解如何在Java程序中实现这一功能。 首先,我们要理解Java是如何与操作系统进行交互的。Java提供了`Runtime`类和`ProcessBuilder`类,这两个类都可以用来执行外部命令...

    java程序调用bat文件,执行oracel数据库备份

    首先,我们需要理解Java调用外部程序的基本原理。在Java中,我们可以使用`Runtime`类或`ProcessBuilder`类来执行操作系统级别的命令,例如运行bat文件。以下是一个简单的示例,展示如何使用`Runtime.getRuntime()....

    java调用bat封装方法

    java执行bat文件方法,其实网上也有很多,我的稍微封装了一下而已

    java创建并调用bat文件

    java创建并调用bat文件

    Java调用bat自动解压

    用Java写的,生成一个bat再调用,按时间从小到大排序,在指定的文件夹下为每个压缩文件单独建一个文件夹,需安装7z

    解决Java调用BAT批处理不弹出cmd窗口的方法分析

    本篇文章是对Java调用BAT批处理不弹出cmd窗口的方法进行了详细的分析介绍,需要的朋友参考下

    java调用dos命令

    最后,我们来讲解如何调用BAT批处理文件。批处理文件通常包含一系列的DOS命令,通过Java调用这些文件可以执行更复杂的操作。以下是示例代码: ```java public class BatchFileRunner { public static void main...

    JAVA代码实现远程操作服务器文件

    "JAVA代码实现远程操作服务器文件" Titulo: JAVA代码实现远程操作服务器文件 JAVA代码实现远程操作服务器文件是指使用JAVA语言实现远程操作服务器文件的功能,实现FTP,共享文件夹操作。该功能可以实现远程服务器...

    java执行bat命令碰到的阻塞问题的解决方法

    在Java编程中,有时我们需要执行操作系统级别的命令,例如运行批处理文件(bat文件)来完成特定的任务。然而,当我们直接使用`Runtime.getRuntime().exec()`方法执行bat命令时,可能会遇到阻塞问题。这个问题通常...

    Oracle存储过程调用bat批处理脚本程序

    - `PR_OTHER_SYSTEM_DATA_IMPORT.prc`: 这可能是一个存储过程,用于导入其他系统数据,它可能包含了调用BAT文件以完成数据转换或加载的逻辑。 - `权限.SQL`: 文件名暗示这可能是一个SQL脚本,用于设置执行这些操作所...

    java远程调用批处理文件代码归总

    Java远程调用批处理文件是将Java编程与批处理脚本结合的一种技术,它允许Java程序执行在远程服务器上的批处理任务,而无需人工干预。这通常涉及到网络通信和进程间交互,使得分布式系统能够更加灵活地管理和调度任务...

    java用bat运行程序

    这样,只需双击.bat文件,就可以自动调用Java虚拟机(JVM)运行我们的Java程序。下面,我们将详细探讨如何实现这个过程以及涉及的相关知识点。 首先,Java程序运行需要Java开发工具包(Java Development Kit,简称...

    bat文件调用java程序

    bat文件调用java程序

    JAVA调用COM组件

    java使用jacob包,调用VS2010编译的COM动态库 其中,包括如下信息: 1、jacob支持JDK1.6、1.7、1.8,支持win32、win64 2、附带有调用COM的java示例 3、运行run.bat,将测试示例一键打包,并同时输出测试结果(实例中...

    登录使用vbs文件调用bat格式的其他模块儿

    标题中的“登录使用vbs文件调用bat格式的其他模块儿”揭示了这是一个关于系统登录过程的实现方式,其中利用了Visual Basic Script (VBS) 和Batch(BAT)脚本技术。VBS是一种脚本语言,常用于Windows环境中执行自动化...

    Bat调用Java

    本文将详细介绍如何使用Bat文件调用Java程序,并以"InvokeHello.bat"调用"Hello.jar"和"Hello.java"为例进行讲解。 首先,让我们了解批处理文件(Bat文件)。批处理文件是Windows操作系统中的脚本文件,它包含一...

    使用JNI进行混合编程:在Java中调用C/C++本地库

    - Sample1.cpp和Sample1.h构成了C/C++端的实现,它们将被编译成动态链接库供Java调用。 通过以上步骤,我们可以看到,JNI允许Java和C/C++代码无缝集成,实现了跨语言的混合编程。这不仅扩展了Java的功能,还能利用...

    bat.rar_bat java_java bat_switch network java

    标题中的"bat.rar_bat java_java bat_switch network java"表明这是一个与Windows操作系统中批处理(BAT)脚本和Java编程语言相关的项目,主要用于网络环境下的IP地址切换。这个工具利用了批处理脚本的便捷性和Java...

    java调用dll或so库示例

    Java调用DLL或SO库是跨平台编程中的一个重要技术,主要通过Java本地接口(JNI)实现。JNI允许Java代码直接调用本地(如C++)编写的动态链接库(DLL,Windows系统)或共享对象库(SO,Linux系统),从而扩展Java应用...

Global site tag (gtag.js) - Google Analytics