tomcat启动方式不同导致代码无法运行?解决办法
tomcat启动方式不同导致代码无法运行?
如题,以下是Postgresql数据库备份代码需要执行批处理,可发现发布后tomcat以控制台方式启动的话代码正常运行(可执行批处理弹出backup.bat窗口待输入密码),若以服务方式启动的话则无法执行批处理backup.bat窗口无法弹出,不知那里出现问题,问问大家要如何解决??
------解决方案--------------------
如题,以下是Postgresql数据库备份代码需要执行批处理,可发现发布后tomcat以控制台方式启动的话代码正常运行(可执行批处理弹出backup.bat窗口待输入密码),若以服务方式启动的话则无法执行批处理backup.bat窗口无法弹出,不知那里出现问题,问问大家要如何解决??
- Java code
try { System.out.println("runtime"); String cmd = "cmd.exe /c start " + "D:\\SLDDataCenter\\Postgresql\\backup.bat" ; Process p = Runtime.getRuntime().exec(cmd); BufferedReader br = new BufferedReader( new InputStreamReader(p.getInputStream())); System.out.println("waiting for password..."); while((br.readLine())!=null){ System.out.println("br: "+br.readLine()); } while (true){ if(p.waitFor() == 0)break; } p.destroy(); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); }
------解决方案--------------------
- Java code
//==========================数据库备份代码 开始===========================// BufferedWriter mBufWriter = null; //建立一个BackupDb.bat文件 FileWriter fileWriter = new FileWriter("BackupDb.bat"); mBufWriter = new BufferedWriter(fileWriter); //转到PostgreSQL安装的根目录 String batLine1=getText("database.postgresPath1"); //转到PostgreSQL下pg_dump.exe文件的路径 String batLine2="cd " + getText("database.postgresPath2"); String batLine4="CLS"; //设置数据库密码,为了跳过后面输入密码的过程 String batLine3="set PGPASSWORD=" + getText("database.postgresdbPwd"); /* ********************************************************* * pg_dump:命令执行备份 * -c:输出在创建数据库创建命令之前先清理(删除)该数据库对象的命令。 * -d:将数据输出为的INSERT命令(而不是 COPY)。(PostgreSQL8.4上无效,暂时不添加) * -h:主机名 * **********************************************************/ String batLine501="pg_dump -c -h " + getText("database.postgresdbHost"); //-U 数据库用户名 String batLine502=" -U " + getText("database.postgresusername"); //-p数据库端口 String batLine503=" -p " + getText("database.postgresdbPort"); //-E导出文件字符编码 String batLine504=" -E " + getText("database.bakupcode"); //要备份的数据库名称 String batLine505=" -D " + getText("database.postgresdbName") +" > "; batLine505=" " + getText("database.postgresdbName") +" > "; //取系统时间 Date NowTimes = new Date(); //将时间格式化成yyMMddhhmmss(年月日时分秒) SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmssms"); String BackupDbName = StringUtils.getPath(getText("database.bakupPath"))+ sdf.format(NowTimes) + ".backup"; BackupDbName = getText("database.bakupPath")+ sdf.format(NowTimes) + ".backup"; mBufWriter.write(batLine1); mBufWriter.newLine(); mBufWriter.write(batLine2); mBufWriter.newLine(); mBufWriter.write(batLine3); mBufWriter.newLine(); mBufWriter.write(batLine4); mBufWriter.newLine(); mBufWriter.write(batLine501); mBufWriter.write(batLine502); mBufWriter.write(batLine503); mBufWriter.write(batLine504); mBufWriter.write(batLine505); mBufWriter.write(BackupDbName); mBufWriter.newLine(); mBufWriter.flush(); mBufWriter.close(); try { // 执行BackupDb.bat文件进行备份数据库 Runtime.getRuntime().exec("BackupDb.bat"); } catch (Exception e) { e.printStackTrace(); setErrMes("文件备份失败!"); // 画面刷新处理 return init(); } // ==========================数据库备份代码 结束===========================//