提交 8f309a52 编写于 作者: liyi_hz2008's avatar liyi_hz2008

Merge branch 'feature/ctl_restartApp' into 'develop'

Merge for feature/ctl_restartApp[系统命令]在CTL里添加restartApp的命令,重启单个应用(.war)

See merge request o2oa/o2oa!512
......@@ -38,6 +38,7 @@ public class ActionControl extends ActionBase {
private static final String CMD_CLH2 = "clh2";
private static final String CMD_UF = "uf";
private static final String CMD_DDL = "ddl";
private static final String CMD_RST = "rst";
private static final int REPEAT_MAX = 100;
private static final int REPEAT_MIN = 1;
......@@ -72,6 +73,8 @@ public class ActionControl extends ActionBase {
uf(cmd);
} else if (cmd.hasOption(CMD_DDL)) {
ddl(cmd);
} else if (cmd.hasOption(CMD_RST)) {
rst(cmd);
} else {
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("control command", options);
......@@ -95,6 +98,7 @@ public class ActionControl extends ActionBase {
options.addOption(clh2Option());
options.addOption(ufOption());
options.addOption(ddlOption());
options.addOption(rstOption());
return options;
}
......@@ -161,6 +165,11 @@ public class ActionControl extends ActionBase {
.desc("导出数据定义语句:建表语句:build,数据库创建:createDB,数据库删除dropDB.").build();
}
private static Option rstOption() {
return Option.builder("rst").longOpt("restartApp").argName("name").hasArg()
.desc("重启指定应用: 应用名称:name, 不带.war").build();
}
private void ec(CommandLine cmd) throws Exception {
if (BooleanUtils.isNotTrue(Config.currentNode().getEraseContentEnable())) {
logger.print("erase content is disabled.");
......@@ -253,6 +262,12 @@ public class ActionControl extends ActionBase {
ddl.execute(type);
}
private void rst(CommandLine cmd) throws Exception {
String name = Objects.toString( cmd.getOptionValue(CMD_RST), "");
RestatWar rst = new RestatWar();
rst.execute(name);
}
private Integer getArgInteger(CommandLine cmd, String opt, Integer defaultValue) {
Integer repeat = defaultValue;
String r = cmd.getOptionValue(opt);
......
package com.x.server.console.action;
import com.x.base.core.container.factory.PersistenceXmlHelper;
import com.x.base.core.project.config.Config;
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
import com.x.base.core.project.tools.DateTools;
import com.x.base.core.project.tools.ListTools;
import com.x.server.console.server.Servers;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
import org.apache.openjpa.jdbc.meta.MappingTool;
import org.apache.openjpa.lib.util.Options;
import org.apache.openjpa.persistence.EntityManagerImpl;
import org.apache.openjpa.persistence.OpenJPAEntityManagerFactory;
import org.apache.openjpa.persistence.OpenJPAPersistence;
import org.eclipse.jetty.deploy.App;
import org.eclipse.jetty.deploy.DeploymentManager;
import org.eclipse.jetty.quickstart.QuickStartWebApp;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.server.handler.gzip.GzipHandler;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class RestatWar {
private static Logger logger = LoggerFactory.getLogger(RestatWar.class);
/* 初始化完成 */
public boolean execute( String simpleName ) throws Exception {
if (Servers.applicationServerIsRunning()) {
try {
GzipHandler gzipHandler = (GzipHandler) Servers.applicationServer.getHandler();
HandlerList hanlderList = (HandlerList) gzipHandler.getHandler();
Boolean appExists = false;
for (Handler handler : hanlderList.getHandlers()) {
if ( QuickStartWebApp.class.isAssignableFrom(handler.getClass())) {
QuickStartWebApp app = (QuickStartWebApp) handler;
if (StringUtils.equals("/" + simpleName, app.getContextPath())) {
appExists = true;
app.stop();
app.start();
}
}
}
if( !appExists ){
logger.print("application {} not exists or not start.", simpleName );
}
return true;
} catch (Exception e) {
e.printStackTrace();
}
}else{
logger.print("application server not start." );
}
logger.print("restart application command excute completed." );
return true;
}
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册