spring|spring boot 项目 四种方式启动项目的正确姿势和注意点

在 研究使用spring boot 的 小demo的时候,还真是 遇到了不少的问题,,,对于我这个不怎么看官网文档和教程的人来说,,,也是搞了半天的哦。spring boot 是搞简单了,可是 需要注意的细节还是不少的,不然就不用玩了,,,特别是对于新手来说。
1, main 方法启动
spring boot 最简单方便的 ,main方法启动 项目。main方法启动项目,官网的demo,或者是百度的demo 都非常的简单,,都是可以启动的。 可以 你想啊,如果我 有很多controller 呢。 一些的demo 就是 这样

SpringApplication.run(WebController.class, args); 如果多个controller 不是写死? 而且 人家也不给这样写啊,,写多个 就报错了吧,,,

可是我作为新生就遇到了一个 问题,,,为什么 启动了项目,,我的controller 类访问不了?或者一部分访问不了? 这个是怎么回事? 我百度了一下, 参考地址: https://www.oschina.net/question/2830949_2190988
啥意思,@SpringBootApplication和controller在一个包里吗,@ComponentScan配置了吗

那个大神的话,提醒了我, 我发现我写的 启动main方法类 和 controller 不是在同一个包,,, 我把他们放在同一个包下面的时候,果然可以测试访问成功了。测试如果是子包下面的也是可以访问的。 即 spring 3 是需要配置包扫描的, 这个 boot默认扫描路径是 当前 main 启动类的 当前 包目录和子包 下面的 类的。
除非 我们手动自定义了 配置的包扫描路径。这样的原理 不管是 使用 那种方式 启动项目都是一样的 我的demo类
package org.project.web; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; // 启动方式:使用 spring-boot 的内嵌的 tomcat启动 项目 @SpringBootApplication // 这个注解 有没有都没有关系,如果是 加载web类的话 public class WebStartByMain { public static void main(String[] args) throws Exception {// 默认使用 tomcat 容器 ,端口 8080 //如果要 启动容器加载 这个 web 类,必须在类上加上@EnableAutoConfiguration //SpringApplication.run(WebController.class, args); //System.out.println(">>>>>>>>>>>>>>>"); //SpringApplication.run(TestController.class, args); //启动项目,默认是 tomcat 启动 端口 8080 , //不管有没有写controller 都会一直启动的,和以前启动tomcat项目一样的 SpringApplication.run(WebStartByMain.class, args); // 需要 注意该类是否 和 controller 在同一个包,必须在同一个包下面,才可以访问的,或者是配置了包扫描的路径 // 默认包扫描的路径是 这个启动类的 同一级目录下的 }}

2, spring-boot 怎么样才可以 和 以前的 web项目一样使用呢
我们在构建 maven项目的时候 ,就必须 构造成 web项目,或者把普通项目 改造为 web项目 , 这样我们才可以使用 IED 里面的tomcat 测试启动项目了。或者是 我们 以后发布为war包的时候也是需要的。 我们在 创建 maven项目的时候, 可以选择 新建 maven-xxxx-webapp 类型的 项目,这样 新建的项目就是一个 web项目, 这时候 必须把 webapp 下面的 web.xml 文件给删掉,如果有的话。 因为 如果他在 会 导致spring-boot 的项目 不能使用 tomcat 启动的。 这种类型的web项目就是比较低级了,可以使用 tomcat 任何版本发版 了。
当然了 我们也可以把普通的maven 项目 改造为 maven web 项目 , 把 pom .xml 打包设置为 war 包,在pom.xml里设置 war
然后 maven更新一下项目,即可了,这样的项目 是比较高级的,,,必须使用 tomcat8 来启动,,tomcat7 不能的。同样webapp 下面如果有web.xml 要删除,我的是没有的。 如果要 使用 eclipse 的自带的tomcat启动项目,就改造pom
org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat javax.servlet javax.servlet-api provided 参考地址: http://blog.csdn.net/javahighness/article/details/52515226地址 http://blog.csdn.net/asdfsfsdgdfgh/article/details/52127562

我的demo
/** * 修改启动类,继承 SpringBootServletInitializer 并重写 configure 方法 * * 为了 使用 外部的tomcat 来启动项目,而不是使用 spring-boot 自带的tomcat启动 * */ public class WebStartByTomcat extends SpringBootServletInitializer{ @Override protected SpringApplicationBuilder configure( SpringApplicationBuilder builder) {// 第二种启动方式 // 注意这里要指向原先用main方法执行的Application启动类 return builder.sources(WebStartByMain.class); }}

3, 部署boot项目
第三种的启动方式的, 就是这个了。 部署的话,spring boot 项目是可以 打成 jar包 使用JVM 直接部署启动的,内置了tomcat的。 默认也是 使用 tomcat8 容器发布的。 但是一般来说呢,我们 不会这样的,都是war包,使用 tomcat7,8 这样的。 如果直接打包 成 war 包部署,肯定启动失败,因为 内容了 tomcat容器了,会和 当前使用的 tomcat 的一些包有冲突的。 可以 这样的:
这样打包war包放入tomcat里面启动的时候就不会 启动异常了,也不影响我们测试使用的。

4,第四种启动方式
其实还是有第四种启动方式的,原理是和main方法启动一样的。 使用 maven命令;
依然可以用内嵌的tomcat来调试,启动命令和以前没变,还是:mvn spring-boot:run。

总结
以我这个菜鸟,写demo 部署demo的体验来,,,特别是使用了 渣渣电脑的体验来看。 那么多种 启动方式, 我推荐我们测试开发的时候 ,使用 main方法,即第一种方式启动。 因为 感觉这样 项目 编译的快,反应快, 对于测试开发来说还是挺好的。 使用tomcat 部署, 反应慢一下,而且 很可能改动了之后 需要重新编译后 才会起效果的,不然tomcat 会比较迟钝的, 特别是对于渣渣电脑来说了。 main 方法一个好处地方就是,,,可以 针对于 一个 controller 测试。
【spring|spring boot 项目 四种方式启动项目的正确姿势和注意点】转载于:https://my.oschina.net/ouminzy/blog/914902

    推荐阅读