diff --git a/mars-start/mars-start-base/pom.xml b/mars-start/mars-start-base/pom.xml new file mode 100644 index 0000000..5e8948b --- /dev/null +++ b/mars-start/mars-start-base/pom.xml @@ -0,0 +1,32 @@ + + + + Mars + com.github.yuyenews + 3.0.13 + + 4.0.0 + jar + mars-start-base + + + + com.github.yuyenews + mars-mvc + ${project.parent.version} + + + com.github.yuyenews + mars-redis + ${project.parent.version} + + + com.github.yuyenews + mars-jdbc + ${project.parent.version} + + + + \ No newline at end of file diff --git a/mars-start/mars-start-base/src/main/java/com/mars/start/base/BaseJunit.java b/mars-start/mars-start-base/src/main/java/com/mars/start/base/BaseJunit.java new file mode 100644 index 0000000..837820f --- /dev/null +++ b/mars-start/mars-start-base/src/main/java/com/mars/start/base/BaseJunit.java @@ -0,0 +1,48 @@ +package com.mars.start.base; + +import com.mars.core.annotation.MarsTest; +import com.mars.core.base.config.MarsConfig; +import com.mars.core.util.MarsConfiguration; +import com.mars.jdbc.load.InitJdbc; +import com.mars.start.startmap.StartLoadList; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * 单测基类 + */ +public abstract class BaseJunit { + + private Logger logger = LoggerFactory.getLogger(BaseJunit.class); + + public BaseJunit(){ + MarsTest marsTest = this.getClass().getAnnotation(MarsTest.class); + if(marsTest == null || marsTest.startClass() == null){ + logger.error("没有正确的配置MarsTest注解"); + } else { + init(marsTest.startClass()); + } + } + + /** + * 获取配置信息 + * @return + */ + public abstract MarsConfig getMarsConfig(); + + /** + * 加载单测需要的资源 + * @param packName 包 + */ + public void init(Class packName){ + MarsConfiguration.loadConfig(getMarsConfig()); + MarsJunitStart.setStartList(StartLoadList.initTestStartList()); + MarsJunitStart.start(getInitJdbc(),packName,this); + } + + /** + * 获取加载jdbc的类 + * @return 类 + */ + public abstract InitJdbc getInitJdbc(); +} diff --git a/mars-start/mars-start-base/src/main/java/com/mars/start/base/BaseStartMars.java b/mars-start/mars-start-base/src/main/java/com/mars/start/base/BaseStartMars.java new file mode 100644 index 0000000..a93ff04 --- /dev/null +++ b/mars-start/mars-start-base/src/main/java/com/mars/start/base/BaseStartMars.java @@ -0,0 +1,54 @@ +package com.mars.start.base; + +import com.mars.core.util.MarsConfiguration; +import com.mars.jdbc.load.InitJdbc; +import com.mars.netty.server.MarsServer; +import com.mars.start.startmap.StartMap; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Map; + +/** + * 启动Mars框架 + * @author yuye + * + */ +public class BaseStartMars { + + private static Logger log = LoggerFactory.getLogger(BaseStartMars.class); + + private static Map startList; + + public static void setStartList(Map startList) { + BaseStartMars.startList = startList; + } + + /** + * 启动Mars框架 + * @param clazz + */ + public static void start(Class clazz, InitJdbc initJdbc) { + try { + + log.info("程序启动中......"); + + /* 加载框架数据 */ + StartLoad.load(initJdbc,clazz,startList); + + /* 启动tomcat */ + MarsServer.start(getPort()); + + } catch (Exception e) { + log.error("启动失败",e); + } + } + + /** + * 获取端口号,默认8080 + * @return + */ + private static int getPort() { + return MarsConfiguration.getConfig().port(); + } +} diff --git a/mars-start/mars-start-base/src/main/java/com/mars/start/base/MarsJunitStart.java b/mars-start/mars-start-base/src/main/java/com/mars/start/base/MarsJunitStart.java new file mode 100644 index 0000000..e96523c --- /dev/null +++ b/mars-start/mars-start-base/src/main/java/com/mars/start/base/MarsJunitStart.java @@ -0,0 +1,70 @@ +package com.mars.start.base; + +import com.mars.core.constant.MarsConstant; +import com.mars.core.constant.MarsSpace; +import com.mars.core.load.LoadHelper; +import com.mars.core.load.WriteFields; +import com.mars.jdbc.load.InitJdbc; +import com.mars.start.startmap.StartMap; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Map; + +/** + * 单测启动器 + */ +public class MarsJunitStart { + + private static Logger log = LoggerFactory.getLogger(MarsJunitStart.class); + + /** + * 获取全局存储空间 + */ + private static MarsSpace constants = MarsSpace.getEasySpace(); + + private static Map startList; + + public static void setStartList(Map startList) { + MarsJunitStart.startList = startList; + } + + /** + * 启动Mars框架 + */ + public static void start(InitJdbc initJdbc, Class packName, Object obj) { + try { + if(constants.getAttr(MarsConstant.HAS_TEST) == null){ + log.info("程序启动中......"); + + /* 加载框架数据 */ + StartLoad.load(initJdbc,packName,startList); + + /* 标记已经为单测创建过资源了 */ + constants.setAttr(MarsConstant.HAS_TEST,"yes"); + } + + /* 给单测注入属性 */ + autoWrite(obj); + + /* 标识是否已经启动 */ + constants.setAttr(MarsConstant.HAS_NETTY_START,"yes"); + + log.info("开始执行单测......"); + } catch (Exception e) { + log.error("启动失败",e); + } + } + + /** + * 给单测注入属性 + */ + public static void autoWrite(Object obj) { + try { + Class cls = obj.getClass(); + WriteFields.writeFields(cls,obj,LoadHelper.getBeanObjectMap()); + } catch (Exception e){ + log.error("初始化单测出现异常",e); + } + } +} diff --git a/mars-start/mars-start-base/src/main/java/com/mars/start/base/StartLoad.java b/mars-start/mars-start-base/src/main/java/com/mars/start/base/StartLoad.java new file mode 100644 index 0000000..5c2023d --- /dev/null +++ b/mars-start/mars-start-base/src/main/java/com/mars/start/base/StartLoad.java @@ -0,0 +1,31 @@ +package com.mars.start.base; + +import com.mars.jdbc.load.InitJdbc; +import com.mars.start.startmap.StartMap; +import com.mars.start.startmap.StartParam; + +import java.util.Map; + +/** + * 加载所需的资源 + */ +public class StartLoad { + + /** + * 加载所需的资源 + * @param initJdbc jdbc加载器 + * @param packName 要扫描的包 + * @param startList 要加载的责任链 + * @throws Exception 异常 + */ + public static void load(InitJdbc initJdbc, Class packName, Map startList) throws Exception{ + + StartParam startParam = new StartParam(); + startParam.setClazz(packName); + startParam.setInitJdbc(initJdbc); + + for(int i=0; i < startList.size(); i++){ + startList.get(i).load(startParam); + } + } +} diff --git a/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/StartLoadList.java b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/StartLoadList.java new file mode 100644 index 0000000..6d4dd6d --- /dev/null +++ b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/StartLoadList.java @@ -0,0 +1,54 @@ +package com.mars.start.startmap; + +import com.mars.start.startmap.impl.*; + +import java.util.HashMap; +import java.util.Map; + +/** + * 启动框架需要加载的资源 + */ +public class StartLoadList { + + /** + * 启动框架需要加载的资源 + * @return 返回值 + */ + public static Map initStartList(){ + + Map startList = new HashMap<>(); + + startList.put(0, new StartCoreServlet()); + startList.put(1, new StartLoadClass()); + startList.put(2, new StartBeans()); + startList.put(3, new StartJDBC()); + startList.put(4, new StartBeanObject()); + startList.put(5, new StartMarsApi()); + startList.put(6, new StartInter()); + startList.put(7, new HasStart()); + startList.put(8, new StartMarsTimer()); + startList.put(9, new StartLoadAfter()); + startList.put(10, new StartExecuteTimer()); + return startList; + } + + /** + * 启动单测需要加载的资源 + * @return 返回值 + */ + public static Map initTestStartList(){ + + Map startList = new HashMap<>(); + + startList.put(0, new StartLoadClass()); + startList.put(1, new StartBeans()); + startList.put(2, new StartJDBC()); + startList.put(3, new StartBeanObject()); + startList.put(4, new HasStart()); + startList.put(5, new StartMarsTimer()); + startList.put(6, new StartLoadAfter()); + startList.put(7, new StartExecuteTimer()); + return startList; + + } +} diff --git a/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/StartMap.java b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/StartMap.java new file mode 100644 index 0000000..3a76eb2 --- /dev/null +++ b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/StartMap.java @@ -0,0 +1,13 @@ +package com.mars.start.startmap; + +/** + * 启动map + */ +public interface StartMap { + + /** + * 要加载的东西 + * @param startParam 参数 + */ + void load(StartParam startParam) throws Exception ; +} diff --git a/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/StartParam.java b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/StartParam.java new file mode 100644 index 0000000..b819664 --- /dev/null +++ b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/StartParam.java @@ -0,0 +1,58 @@ +package com.mars.start.startmap; + +import com.mars.jdbc.load.InitJdbc; + +/** + * 启动框架的参数 + */ +public class StartParam { + + /** + * 启动类 + */ + private Class clazz; + /** + * 启动类所在的包 + */ + private String startClassName; + /** + * 加载JDBC的类 + */ + private InitJdbc initJdbc; + /** + * 配置文件标识 + */ + private String suffix; + + public Class getClazz() { + return clazz; + } + + public String getStartClassName() { + return startClassName; + } + + public void setStartClassName(String startClassName) { + this.startClassName = startClassName; + } + + public void setClazz(Class clazz) { + this.clazz = clazz; + } + + public InitJdbc getInitJdbc() { + return initJdbc; + } + + public void setInitJdbc(InitJdbc initJdbc) { + this.initJdbc = initJdbc; + } + + public String getSuffix() { + return suffix; + } + + public void setSuffix(String suffix) { + this.suffix = suffix; + } +} diff --git a/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/HasStart.java b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/HasStart.java new file mode 100644 index 0000000..30f9ad6 --- /dev/null +++ b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/HasStart.java @@ -0,0 +1,27 @@ +package com.mars.start.startmap.impl; + +import com.mars.core.constant.MarsConstant; +import com.mars.core.constant.MarsSpace; +import com.mars.start.startmap.StartMap; +import com.mars.start.startmap.StartParam; + +/** + * 标识createBean方法已经调用完毕 + */ +public class HasStart implements StartMap { + + /** + * 获取全局存储空间 + */ + private MarsSpace constants = MarsSpace.getEasySpace(); + + /** + * 标识createBean方法已经调用完毕 + * @param startParam 参数 + * @throws Exception 异常 + */ + @Override + public void load(StartParam startParam) throws Exception { + constants.setAttr(MarsConstant.HAS_START,"yes"); + } +} \ No newline at end of file diff --git a/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartBeanObject.java b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartBeanObject.java new file mode 100644 index 0000000..481faa4 --- /dev/null +++ b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartBeanObject.java @@ -0,0 +1,21 @@ +package com.mars.start.startmap.impl; + +import com.mars.ioc.load.LoadMarsBean; +import com.mars.start.startmap.StartMap; +import com.mars.start.startmap.StartParam; + +/** + * 创建bean对象 + */ +public class StartBeanObject implements StartMap { + + /** + * 创建bean对象 + * @param startParam 参数 + * @throws Exception 异常 + */ + @Override + public void load(StartParam startParam) throws Exception { + LoadMarsBean.loadBean(); + } +} \ No newline at end of file diff --git a/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartBeans.java b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartBeans.java new file mode 100644 index 0000000..7caab99 --- /dev/null +++ b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartBeans.java @@ -0,0 +1,16 @@ +package com.mars.start.startmap.impl; + +import com.mars.core.load.LoadBeans; +import com.mars.start.startmap.StartMap; +import com.mars.start.startmap.StartParam; + +/** + * 扫描包 + */ +public class StartBeans implements StartMap { + + @Override + public void load(StartParam startParam) throws Exception { + LoadBeans.loadBeans(); + } +} diff --git a/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartCoreServlet.java b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartCoreServlet.java new file mode 100644 index 0000000..9949220 --- /dev/null +++ b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartCoreServlet.java @@ -0,0 +1,22 @@ +package com.mars.start.startmap.impl; + +import com.mars.core.ncfg.mvc.CoreServletClass; +import com.mars.mvc.servlet.MarsCoreServlet; +import com.mars.start.startmap.StartMap; +import com.mars.start.startmap.StartParam; + +/** + * 配置核心servlet + */ +public class StartCoreServlet implements StartMap { + + /** + * 配置核心servlet + * @param startParam 参数 + * @throws Exception 异常 + */ + @Override + public void load(StartParam startParam) throws Exception { + CoreServletClass.setCls(MarsCoreServlet.class); + } +} diff --git a/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartExecuteTimer.java b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartExecuteTimer.java new file mode 100644 index 0000000..785c492 --- /dev/null +++ b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartExecuteTimer.java @@ -0,0 +1,18 @@ +package com.mars.start.startmap.impl; + +import com.mars.start.startmap.StartMap; +import com.mars.start.startmap.StartParam; +import com.mars.timer.execute.ExecuteMarsTimer; + +public class StartExecuteTimer implements StartMap { + + /** + * 执行定时任务 + * @param startParam 参数 + * @throws Exception 异常 + */ + @Override + public void load(StartParam startParam) throws Exception { + ExecuteMarsTimer.execute(); + } +} diff --git a/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartInter.java b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartInter.java new file mode 100644 index 0000000..83f1eb2 --- /dev/null +++ b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartInter.java @@ -0,0 +1,21 @@ +package com.mars.start.startmap.impl; + +import com.mars.mvc.load.LoadInters; +import com.mars.start.startmap.StartMap; +import com.mars.start.startmap.StartParam; + +/** + * 创建interceptor对象 + */ +public class StartInter implements StartMap { + + /** + * 创建interceptor对象 + * @param startParam 参数 + * @throws Exception 异常 + */ + @Override + public void load(StartParam startParam) throws Exception { + LoadInters.loadIntersList(); + } +} diff --git a/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartJDBC.java b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartJDBC.java new file mode 100644 index 0000000..d6164b5 --- /dev/null +++ b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartJDBC.java @@ -0,0 +1,22 @@ +package com.mars.start.startmap.impl; + +import com.mars.start.startmap.StartMap; +import com.mars.start.startmap.StartParam; + +/** + * 加载JDBC模块 + */ +public class StartJDBC implements StartMap { + + /** + * 加载JDBC模块 + * @param startParam 参数 + * @throws Exception 异常 + */ + @Override + public void load(StartParam startParam) throws Exception { + if(startParam.getInitJdbc() != null){ + startParam.getInitJdbc().init(); + } + } +} diff --git a/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartLoadAfter.java b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartLoadAfter.java new file mode 100644 index 0000000..8df37c7 --- /dev/null +++ b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartLoadAfter.java @@ -0,0 +1,18 @@ +package com.mars.start.startmap.impl; + +import com.mars.core.after.StartAfter; +import com.mars.start.startmap.StartMap; +import com.mars.start.startmap.StartParam; + +public class StartLoadAfter implements StartMap { + + /** + * 启动after方法 + * @param startParam 参数 + * @throws Exception 异常 + */ + @Override + public void load(StartParam startParam) throws Exception { + StartAfter.after(); + } +} diff --git a/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartLoadClass.java b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartLoadClass.java new file mode 100644 index 0000000..39412bd --- /dev/null +++ b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartLoadClass.java @@ -0,0 +1,43 @@ +package com.mars.start.startmap.impl; + +import com.mars.core.load.LoadClass; +import com.mars.start.startmap.StartMap; +import com.mars.start.startmap.StartParam; + +/** + * 扫描包下面的类 + */ +public class StartLoadClass implements StartMap { + + /** + * 扫描包 + * @param startParam 参数 + * @throws Exception 异常 + */ + @Override + public void load(StartParam startParam) throws Exception { + /*获取要扫描的包*/ + String className = getClassName(startParam); + + /* 获取此包下面的所有类(包括jar中的) */ + LoadClass.scanClass(className); + } + + /** + * 截取main方法所在包名 + * @param startParam 类 + * @return 返回值 + * @throws Exception 异常 + */ + private String getClassName(StartParam startParam) throws Exception { + String className = startParam.getClazz().getName(); + if(className.lastIndexOf(".") > 0){ + className = className.substring(0,className.lastIndexOf(".")); + } + + if(className.indexOf(".") < 0){ + throw new Exception("启动服务的main方法所在的类,必须放在两层包名中,比如[com.mars,com.test]等,不允许放在[com,cn]等包中,更不允许放在包外面"); + } + return className; + } +} diff --git a/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartMarsApi.java b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartMarsApi.java new file mode 100644 index 0000000..3f65603 --- /dev/null +++ b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartMarsApi.java @@ -0,0 +1,21 @@ +package com.mars.start.startmap.impl; + +import com.mars.mvc.load.LoadMarsApi; +import com.mars.start.startmap.StartMap; +import com.mars.start.startmap.StartParam; + +/** + * 创建controller对象 + */ +public class StartMarsApi implements StartMap { + + /** + * 创建controller对象 + * @param startParam 参数 + * @throws Exception 异常 + */ + @Override + public void load(StartParam startParam) throws Exception { + LoadMarsApi.loadMarsApis(); + } +} \ No newline at end of file diff --git a/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartMarsTimer.java b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartMarsTimer.java new file mode 100644 index 0000000..8133244 --- /dev/null +++ b/mars-start/mars-start-base/src/main/java/com/mars/start/startmap/impl/StartMarsTimer.java @@ -0,0 +1,21 @@ +package com.mars.start.startmap.impl; + +import com.mars.start.startmap.StartMap; +import com.mars.start.startmap.StartParam; +import com.mars.timer.load.LoadMarsTimer; + +/** + * 加载timer对象 + */ +public class StartMarsTimer implements StartMap { + + /** + * 加载timer对象 + * @param startParam 参数 + * @throws Exception 异常 + */ + @Override + public void load(StartParam startParam) throws Exception { + LoadMarsTimer.loadMarsTimers(); + } +} diff --git a/mars-start/mars-start-pure/pom.xml b/mars-start/mars-start-pure/pom.xml new file mode 100644 index 0000000..5730652 --- /dev/null +++ b/mars-start/mars-start-pure/pom.xml @@ -0,0 +1,21 @@ + + + + Mars + com.github.yuyenews + 3.0.13 + + 4.0.0 + jar + mars-start-pure + + + + com.github.yuyenews + mars-start-base + ${project.parent.version} + + + \ No newline at end of file diff --git a/mars-start/mars-start-pure/src/main/java/com/mars/junit/MarsJunit.java b/mars-start/mars-start-pure/src/main/java/com/mars/junit/MarsJunit.java new file mode 100644 index 0000000..9efb86d --- /dev/null +++ b/mars-start/mars-start-pure/src/main/java/com/mars/junit/MarsJunit.java @@ -0,0 +1,15 @@ +package com.mars.junit; + +import com.mars.jdbc.load.InitJdbc; +import com.mars.start.base.BaseJunit; + +/** + * junit + */ +public abstract class MarsJunit extends BaseJunit { + + @Override + public InitJdbc getInitJdbc() { + return new InitJdbc(); + } +} diff --git a/mars-start/mars-start-pure/src/main/java/com/mars/start/StartMars.java b/mars-start/mars-start-pure/src/main/java/com/mars/start/StartMars.java new file mode 100644 index 0000000..4d0475e --- /dev/null +++ b/mars-start/mars-start-pure/src/main/java/com/mars/start/StartMars.java @@ -0,0 +1,26 @@ +package com.mars.start; + +import com.mars.core.base.config.MarsConfig; +import com.mars.core.util.MarsConfiguration; +import com.mars.jdbc.load.InitJdbc; +import com.mars.start.base.BaseStartMars; +import com.mars.start.startmap.StartLoadList; + +/** + * 启动Mars框架 + * @author yuye + * + */ +public class StartMars { + /** + * 启动Mars框架 + * @param clazz + */ + public static void start(Class clazz, MarsConfig marsConfig){ + BaseStartMars.setStartList(StartLoadList.initStartList()); + if(marsConfig != null){ + MarsConfiguration.loadConfig(marsConfig); + } + BaseStartMars.start(clazz,new InitJdbc()); + } +} diff --git a/mars-start/pom.xml b/mars-start/pom.xml new file mode 100644 index 0000000..4adc349 --- /dev/null +++ b/mars-start/pom.xml @@ -0,0 +1,18 @@ + + + + Mars + com.github.yuyenews + 3.0.13 + + 4.0.0 + pom + mars-start + + + mars-start-base + mars-start-pure + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 841f809..ebb4454 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,8 @@ mars-server mars-jdbc mars-redis - + mars-start + ${java.home}/../bin/javadoc