فهرست منبع

1.添加自动运行的功能。
2.添加计划任务的脚本。

YangZhiJie 8 سال پیش
والد
کامیت
1989c5524c

+ 2 - 0
.hgignore

@@ -2,3 +2,5 @@ syntax: glob
 *.class
 target/*
 *.log
+stop.bat
+start.bat

+ 14 - 14
config/applicationContext.xml

@@ -28,38 +28,38 @@
 
 	<bean id="applicationSetting1" class="com.leanwo.management.model.ApplicationSetting">
 		<property name="name" value="Prodog服务程序"></property>
-		<property name="startBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171212\start.bat"></property>
-		<property name="stopBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171212\stop.bat"></property>
+		<property name="startBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171218\start.bat"></property>
+		<property name="stopBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171218\stop.bat"></property>
 	</bean>
 	<bean id="applicationSetting2" class="com.leanwo.management.model.ApplicationSetting">
 		<property name="name" value="报表服务程序"></property>
-		<property name="startBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171212\start.bat"></property>
-		<property name="stopBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171212\stop.bat"></property>
+		<property name="startBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171218\start.bat"></property>
+		<property name="stopBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171218\stop.bat"></property>
 	</bean>
 	<bean id="applicationSetting3" class="com.leanwo.management.model.ApplicationSetting">
 		<property name="name" value="工作流服务程序"></property>
-		<property name="startBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171212\start.bat"></property>
-		<property name="stopBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171212\stop.bat"></property>
+		<property name="startBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171218\start.bat"></property>
+		<property name="stopBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171218\stop.bat"></property>
 	</bean>
 	<bean id="applicationSetting4" class="com.leanwo.management.model.ApplicationSetting">
 		<property name="name" value="钉钉服务程序"></property>
-		<property name="startBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171212\start.bat"></property>
-		<property name="stopBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171212\stop.bat"></property>
+		<property name="startBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171218\start.bat"></property>
+		<property name="stopBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171218\stop.bat"></property>
 	</bean>
 	<bean id="applicationSetting5" class="com.leanwo.management.model.ApplicationSetting">
 		<property name="name" value="微信服务程序"></property>
-		<property name="startBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171212\start.bat"></property>
-		<property name="stopBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171212\stop.bat"></property>
+		<property name="startBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171218\start.bat"></property>
+		<property name="stopBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171218\stop.bat"></property>
 	</bean>
 	<bean id="applicationSetting6" class="com.leanwo.management.model.ApplicationSetting">
 		<property name="name" value="中间件程序"></property>
-		<property name="startBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171212\start.bat"></property>
-		<property name="stopBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171212\stop.bat"></property>
+		<property name="startBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171218\start.bat"></property>
+		<property name="stopBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171218\stop.bat"></property>
 	</bean>
 	<bean id="applicationSetting7" class="com.leanwo.management.model.ApplicationSetting">
 		<property name="name" value="抓拍程序"></property>
-		<property name="startBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171212\start.bat"></property>
-		<property name="stopBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171212\stop.bat"></property>
+		<property name="startBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171218\start.bat"></property>
+		<property name="stopBatFile" value="C:\Users\YangZhiJie\Desktop\Servers\DingTalk_Server_20171218\stop.bat"></property>
 	</bean>
 	
 	<bean id="springUtil" class="org.leanwo.management.util.SpringUtil" />

+ 2 - 2
config/run.bat

@@ -1,5 +1,5 @@
 title Report Server
 set current_path="%cd%"
 cd %current_path%
-java -jar %current_path%\report-server-0.0.1-SNAPSHOT.jar
-pause
+@echo off
+start javaw -jar %current_path%\ServerManagement-0.0.1-SNAPSHOT.jar

+ 11 - 0
config/schedule.bat

@@ -0,0 +1,11 @@
+@echo off
+set NAME=ProdogServerManagement
+set COMMAND=x:\xx\autoStart.bat
+
+%SystemDrive%
+cd %windir%\tasks\
+if exist %NAME%.job del %NAME%.job
+
+schtasks /create /tn %NAME% /tr "%COMMAND%" /sc onlogon
+
+pause

+ 1 - 4
pom.xml

@@ -92,9 +92,6 @@
 	                            </filter>  
 	                        </filters>
 							<transformers>
-								<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
-									<resource>jasperreports_extension.properties</resource>
-								</transformer>
 								<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
 									<resource>META-INF/spring.schemas</resource>
 								</transformer> 
@@ -103,7 +100,7 @@
 			                    </transformer>  
 								<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
 									<manifestEntries>
-										<Main-Class>com.leanwo.report.server.ReportServerApp</Main-Class>
+										<Main-Class>org.leanwo.management.ServerManagementApp</Main-Class>
 									</manifestEntries>
 								</transformer>
 							</transformers>

+ 38 - 4
src/main/java/com/leanwo/management/ServerManagmentJFrame.java

@@ -54,7 +54,7 @@ public class ServerManagmentJFrame extends JFrame implements ActionListener {
 
 	private Map<ApplicationSetting, JLabel> statusLabels = null;
 	
-	public ServerManagmentJFrame() {
+	public ServerManagmentJFrame(boolean isAutoRun) {
 		this.setLayout(new BorderLayout());
 		
 		jPanel = new JPanel(new GridBagLayout());
@@ -72,6 +72,11 @@ public class ServerManagmentJFrame extends JFrame implements ActionListener {
 		
 		timer = new Timer(1000,this);
 		timer.start();
+		
+		// 程序自动运行
+		if(isAutoRun) {
+			autoStart();
+		}
 	}
 
 	public void generateViewFromJson() {
@@ -184,7 +189,7 @@ public class ServerManagmentJFrame extends JFrame implements ActionListener {
 							ExecuteWatchdog executeWatchdog = runProcess(setting.getStopBatFile());
 							setting.setExecuteWatchdog(null);
 						} catch (IOException e1) {
-							e1.printStackTrace();
+							logger.error("程序启动失败", e1);
 						}
 					}
 				});
@@ -214,7 +219,7 @@ public class ServerManagmentJFrame extends JFrame implements ActionListener {
 		
 		//等待5秒。
 		try {
-			resultHandler.waitFor(5000);
+			resultHandler.waitFor(2000);
 		} catch (InterruptedException e) {
 			e.printStackTrace();
 		}
@@ -239,8 +244,37 @@ public class ServerManagmentJFrame extends JFrame implements ActionListener {
 					if(executeWatchdog == null) {
 						statusLabel.setText("未运行");
 					}else{
-						statusLabel.setText("运行中");
+						if(executeWatchdog.isWatching()) {
+							statusLabel.setText("运行中");					
+						}else {
+							statusLabel.setText("已停止");		
+						}
+					}
+				}
+			}
+		}
+	}
+	
+	/**
+	 * 程序自动运行
+	 */
+	private void autoStart() {
+		ApplicationSettingCache applicationSettingCache = (ApplicationSettingCache) SpringUtil.getSingleBean(ApplicationSettingCache.class);
+
+		List<ApplicationSetting> settings = applicationSettingCache.getSettings();
+		if (settings != null && settings.size() > 0) {
+			for(int i = 0; i < settings.size(); i ++) {
+				final ApplicationSetting setting = settings.get(i);
+				ExecuteWatchdog executeWatchdog;
+				try {
+					executeWatchdog = runProcess(setting.getStartBatFile());
+					boolean isWatch = executeWatchdog.isWatching();
+					if(! isWatch) {
+						logger.error("程序" + setting.getName() + "启动失败");
 					}
+					setting.setExecuteWatchdog(executeWatchdog);
+				} catch (IOException e) {
+					logger.error("程序" + setting.getName() + "启动失败", e);
 				}
 			}
 		}

+ 1 - 1
src/main/java/log4j.properties

@@ -5,7 +5,7 @@ log4j.appender.A1.layout=org.apache.log4j.PatternLayout
 log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss} [%c]-[%p] %m%n
 
 log4j.appender.R=org.apache.log4j.RollingFileAppender 
-log4j.appender.R.File=logs/report-server.log
+log4j.appender.R.File=logs/server-management.log
 log4j.appender.R.MaxFileSize=500KB
 log4j.appender.R.MaxBackupIndex=1
 log4j.appender.R.layout=org.apache.log4j.PatternLayout 

+ 22 - 2
src/main/java/org/leanwo/management/ServerManagementApp.java

@@ -1,5 +1,10 @@
 package org.leanwo.management;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.leanwo.management.util.ProgramAutoStartUtil;
+import org.leanwo.management.util.ProgramStartUtil;
+import org.leanwo.management.util.ProgramStopUtil;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.FileSystemXmlApplicationContext;
 
@@ -10,10 +15,25 @@ import com.leanwo.management.ServerManagmentJFrame;
  *
  */
 public class ServerManagementApp {
+	
+	private static Log logger = LogFactory.getLog(ServerManagmentJFrame.class);
+	
 	public static void main(String[] args) {
-		ApplicationContext factory = new FileSystemXmlApplicationContext("config/applicationContext.xml");
-		ServerManagmentJFrame serverManagmentJFrame = new ServerManagmentJFrame();
+		//ProgramStartUtil.generateStartBat();
+		ProgramAutoStartUtil.generateStartBat();
+		ProgramStopUtil.generateStopBat();
+		
+		boolean isAutoRun = false;
+		if(args != null && args.length > 0) {
+			if(args[0].equals("autoRun")) {
+				isAutoRun = true;
+			}
+		}
 		
+		logger.info("程序管理器将会自动运行。");
 		
+		
+		ApplicationContext factory = new FileSystemXmlApplicationContext("config/applicationContext.xml");
+		ServerManagmentJFrame serverManagmentJFrame = new ServerManagmentJFrame(isAutoRun);
 	}
 }

+ 66 - 0
src/main/java/org/leanwo/management/util/ProgramAutoStartUtil.java

@@ -0,0 +1,66 @@
+package org.leanwo.management.util;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileWriter;
+import java.io.IOException;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * 程序启动通用类
+ * 
+ * @author YangZhiJie
+ *
+ */
+public class ProgramAutoStartUtil {
+	private static Log logger = LogFactory.getLog(ProgramAutoStartUtil.class);
+
+	/**
+	 * 生成停止程序的BAT文件
+	 */
+	public static void generateStartBat() {
+		File file = new File("autoStart.bat");
+		if (file.exists() == false) {
+			try {
+				file.createNewFile();
+			} catch (IOException e) {
+				logger.error("autoStart.bat文件创建失败.");
+				e.printStackTrace();
+			}
+		}
+
+		logger.info("autoStart.bat文件的路径如下:" + file.getAbsolutePath());
+
+		try {
+			BufferedWriter out = new BufferedWriter(new FileWriter(file, false));
+			String path = file.getAbsolutePath().replace(File.separatorChar + file.getName(), "");
+			
+			String command = "CD " + path + "\r\n";
+			String diskName = path.substring(0, path.indexOf(":") + 1);
+			command += (diskName + "\r\n");
+			
+
+			File pathFolder = new File(path);
+			File[] files = pathFolder.listFiles(new FileFilter() {
+				@Override
+				public boolean accept(File pathname) {
+					if (pathname.isFile() && pathname.getName().endsWith(".jar")) {
+						return true;
+					}
+					return false;
+				}
+			});
+			
+			if(files != null && files.length > 0) {
+				command += ("start javaw -jar " + files[0].getName() + " autoRun");
+			}
+			out.write(command);
+			out.close();
+		} catch (IOException e) {
+			logger.error("autoStart.bat文件写入失败。");
+		}
+	}
+}

+ 66 - 0
src/main/java/org/leanwo/management/util/ProgramStartUtil.java

@@ -0,0 +1,66 @@
+package org.leanwo.management.util;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileWriter;
+import java.io.IOException;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * 程序启动通用类
+ * 
+ * @author YangZhiJie
+ *
+ */
+public class ProgramStartUtil {
+	private static Log logger = LogFactory.getLog(ProgramStartUtil.class);
+
+	/**
+	 * 生成停止程序的BAT文件
+	 */
+	public static void generateStartBat() {
+		File file = new File("start.bat");
+		if (file.exists() == false) {
+			try {
+				file.createNewFile();
+			} catch (IOException e) {
+				logger.error("start.bat文件创建失败.");
+				e.printStackTrace();
+			}
+		}
+
+		logger.info("start.bat文件的路径如下:" + file.getAbsolutePath());
+
+		try {
+			BufferedWriter out = new BufferedWriter(new FileWriter(file, false));
+			String path = file.getAbsolutePath().replace(File.separatorChar + file.getName(), "");
+			
+			String command = "CD " + path + "\r\n";
+			String diskName = path.substring(0, path.indexOf(":") + 1);
+			command += (diskName + "\r\n");
+			
+
+			File pathFolder = new File(path);
+			File[] files = pathFolder.listFiles(new FileFilter() {
+				@Override
+				public boolean accept(File pathname) {
+					if (pathname.isFile() && pathname.getName().endsWith(".jar")) {
+						return true;
+					}
+					return false;
+				}
+			});
+			
+			if(files != null && files.length > 0) {
+				command += ("javaw -jar " + files[0].getName());
+			}
+			out.write(command);
+			out.close();
+		} catch (IOException e) {
+			logger.error("start.bat文件写入失败。");
+		}
+	}
+}

+ 58 - 0
src/main/java/org/leanwo/management/util/ProgramStopUtil.java

@@ -0,0 +1,58 @@
+package org.leanwo.management.util;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.lang.management.ManagementFactory;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * 程序关闭通用类
+ * @author YangZhiJie
+ *
+ */
+public class ProgramStopUtil {
+	private static Log logger = LogFactory.getLog(ProgramStopUtil.class);
+
+	/**
+	 * 生成停止程序的BAT文件
+	 */
+	public static void generateStopBat() {
+		File file = new File("stop.bat");
+		if(file.exists() == false) {
+			try {
+				file.createNewFile();
+			} catch (IOException e) {
+				logger.error("stop.bat文件创建失败.");
+				e.printStackTrace();
+			}
+		}
+		
+		logger.info("stop.bat文件的路径如下:" + file.getAbsolutePath());
+		
+		try {
+	         BufferedWriter out = new BufferedWriter(new FileWriter(file, false));
+	         String command = "taskkill /pid " + getPid() + " -t -f";
+	         out.write(command);
+	         out.close();
+		} catch (IOException e) {
+			logger.error("stop.bat文件写入失败。");
+		}
+	}
+	
+	/**
+	 * 获取PID
+	 * @return
+	 */
+	private static String getPid() {
+		// get name representing the running Java virtual machine.    
+		String name = ManagementFactory.getRuntimeMXBean().getName();    
+		// get pid    
+		String pid = name.split("@")[0];    
+		logger.debug("Pid is:" + pid);
+		return pid;
+	}
+}