spring-boot采用war包启动模式。

一、demo的结构预览

spring-boot采用war包启动模式。_第1张图片

    二、在jar包启动的基础上,需要增加的地方

    1)、改成war的maven项目,并且用maven插件忽略web.xml或者像我这样建个空的web.xml

       1.1 pom中加  war

       1.2 spring-boot采用war包启动模式。_第2张图片 加空文件。

   2)、建立一个类实现SpringBootServletInitializer ,并且覆盖 configure方法,在方法内注入你标记启动的类。

/**
 * war包启动!  ----就是图1标了红圈的第二个类
 */
public class ApplicationWar extends SpringBootServletInitializer  {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }
}

  3)、在pom文件中将内置容器变成provided

    	
		    
		        org.springframework.boot
		        spring-boot-starter-tomcat
		        provided
		    

  4)、(不是必须)加个tomcat插件或者jetty插件。

        
	
		org.apache.tomcat.maven
		tomcat7-maven-plugin
		2.2
		
			/
			UTF-8
			8082 //我这个端口故意弄成和jar启动不一样
			tomcat7
		
	

三、效果。

    3.1、用maven的tomcat插件启动了个war包端口8082,还用main函数启动内置tomcat,端口8080.

    spring-boot采用war包启动模式。_第3张图片

 

四、其他

    启动原理大概:

    main函数里面SpringApplication.run()是先启动内置tomcat,再把spring容器建立,并注入servletContext。而用war启动,等于servlet3.0里面只要实现了“某接口”,就会执行这个接口的startup方法,而spring内部就实现了这个接口,再去找你实现的spring的某个接口,最后把你的启动类注入进去,然后调用SpringApplication.run,这个时候就不会注入内置tomcat的servletContext,而是外部的servletContext了。

你可能感兴趣的:(spring-boot)