package com.taobao.yugong;
import java.io.FileInputStream;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.taobao.yugong.common.version.VersionInfo;
import com.taobao.yugong.controller.YuGongController;
public class YuGongLauncher {
private static final String CLASSPATH_URL_PREFIX = "classpath:";
private static final Logger logger = LoggerFactory.getLogger(YuGongLauncher.class);
public static void main(String[] args) throws Throwable {
try {
String conf = System.getProperty("yugong.conf", "classpath:yugong.properties");
PropertiesConfiguration config = new PropertiesConfiguration();
if (conf.startsWith(CLASSPATH_URL_PREFIX)) {
conf = StringUtils.substringAfter(conf, CLASSPATH_URL_PREFIX);
config.load(YuGongLauncher.class.getClassLoader().getResourceAsStream(conf));
} else {
config.load(new FileInputStream(conf));
}
logger.info("## start the YuGong.");
final YuGongController controller = new YuGongController(config);
controller.start();
logger.info("## the YuGong is running now ......");
logger.info(VersionInfo.getBuildVersion());
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
if (controller.isStart()) {
try {
logger.info("## stop the YuGong");
controller.stop();
} catch (Throwable e) {
logger.warn("## something goes wrong when stopping YuGong:\n{}",
ExceptionUtils.getFullStackTrace(e));
} finally {
logger.info("## YuGong is down.");
}
}
}
});
controller.waitForDone();// 如果所有都完成,则进行退出
Thread.sleep(3 * 1000); // 等待3s,清理上下文
logger.info("## stop the YuGong");
if (controller.isStart()) {
controller.stop();
}
logger.info("## YuGong is down.");
} catch (Throwable e) {
logger.error("## Something goes wrong when starting up the YuGong:\n{}",
ExceptionUtils.getFullStackTrace(e));
System.exit(0);
}
}
}