Spring Boot 学习(一)

根据Spring Boot中文参考手册及网上搜集的资料,系统的学习了一下Spring Boot, 总结如下, 希望对初学者有所帮助:


Spring  Boot介绍

1.Spring Boot让程序 只需 "just run" 。为 Spring 平台及第三方库提供开箱即用的 设置
2. 包含的特性:
  • 创建可以独立运行的 Spring应用。
  • 直接嵌入 TomcatJetty服务器。
  • 提供推荐的基础 POM文件来简化Apache Maven配置。
  • 尽可能的根据项目依赖来自动配置 Spring框架。
  • 提供可以直接在生产环境中使用的功能,如性能指标、应用信息和应用健康检查。
  • 没有代码生成,也没有 XML配置文件。


Springboot构建WEB项目实例 

1. 创建 Maven 工程
  • 首先 使用eclipsej2ee创建一个maven工程

2. Start POMs
  • pom.xml中引入spring-boot-start-parentspring官方解释叫stater POMs

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.1.RELEASE</version>
    </parent>


spring-boot-starter-parent包含了以下信息:

  • 使用java6编译级别
  • 使用utf-8编码
  • 实现了通用的测试框架 (JUnit, Hamcrest, Mockito).
  • 智能资源过滤
  • 智能的插件配置(exec plugin, surefire, Git commit ID, shade).


3. Spring Web 依赖
  • spring-boot-starter-web包含了springwebmvctomcatweb开发的特性。 
     <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
     </dependency>

4. 启动类
  • 申明spring boot自动给我们配置spring需要的配置
  • 提倡基于Java的配置。可以使用一个XML源来调用SpringApplication.run(),通常建议使 用@Configuration作为主要源
<pre name="code" class="java">import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableAutoConfiguration
public class Example {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(Example.class, args);
    }
}

 
 

  • Run As Java Application,Spring boot项目启动结果 
<pre name="code" class="plain"><span style="color:#404040;"> .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.2.1.RELEASE)

2016-03-16 13:54:49.759  INFO 4788 --- [           main] Example                                  : Starting Example on xyzhou-PC with PID 4788 (H:\demo\spring-boot\target\classes started by xyzhou in H:\demo\spring-boot)
2016-03-16 13:54:49.786  INFO 4788 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@5bfbf16f: startup date [Wed Mar 16 13:54:49 CST 2016]; root of context hierarchy
2016-03-16 13:54:50.147  INFO 4788 --- [           main] o.s.b.f.s.DefaultListableBeanFactory     : Overriding bean definition for bean 'beanNameViewResolver': replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]]
2016-03-16 13:54:50.831  INFO 4788 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2016-03-16 13:54:51.028  INFO 4788 --- [           main] o.apache.catalina.core.StandardService   : Starting service Tomcat
2016-03-16 13:54:51.030  INFO 4788 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.0.15
2016-03-16 13:54:51.122  INFO 4788 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2016-03-16 13:54:51.122  INFO 4788 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1339 ms
2016-03-16 13:54:51.588  INFO 4788 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
2016-03-16 13:54:51.594  INFO 4788 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'characterEncodingFilter' to: [/*]
2016-03-16 13:54:51.594  INFO 4788 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2016-03-16 13:54:51.766  INFO 4788 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@5bfbf16f: startup date [Wed Mar 16 13:54:49 CST 2016]; root of context hierarchy
2016-03-16 13:54:51.809  INFO 4788 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2016-03-16 13:54:51.809  INFO 4788 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[text/html],custom=[]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest)
2016-03-16 13:54:51.834  INFO 4788 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-03-16 13:54:51.834  INFO 4788 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-03-16 13:54:51.870  INFO 4788 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-03-16 13:54:51.927  INFO 4788 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
</span><span style="color:#ff0000;">2016-03-16 13:54:51.996  INFO 4788 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)</span><span style="color:#404040;">
2016-03-16 13:54:51.998  INFO 4788 --- [           main] Example                                  : Started Example in 2.443 seconds (JVM running for 2.813)
</span>


 
  

可以看到内嵌的Tomcat已启动, 具体Embeded Tomcat启动流程如下:

Embeded Tomcat的启动流程

  • spring boot在启动时,先通过一个简单的查找Servlet类的方式来判断是不是在web环境:
  • 如果是,则会创建AnnotationConfigEmbeddedWebApplicationContext,否则Springcontext就是AnnotationConfigApplicationContext

选择Spring Boot项目的内嵌容器

  • SpringBoot工程的默认web容器是Tomcat,可修改,例如Jetty或者Undertow。
  • 在pom文件中排除tomcat的starter
  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
  • 增加Jetty依赖

 <span style="white-space:pre">	</span><dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
            <!--  For External Provider  -->
            <scope>provided</scope>            
        </dependency>
        
         <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-servlets</artifactId>
            <version>${jetty.version}</version>
        </dependency>

  • Run As Java Application, 可以看到Jetty已经启动
 .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.2.1.RELEASE)

2016-03-16 14:02:57.698  INFO 5252 --- [           main] Example                                  : Starting Example on xyzhou-PC with PID 5252 (H:\demo\spring-boot\target\classes started by xyzhou in H:\demo\spring-boot)
2016-03-16 14:02:57.731  INFO 5252 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@704921a5: startup date [Wed Mar 16 14:02:57 CST 2016]; root of context hierarchy
2016-03-16 14:02:58.234  INFO 5252 --- [           main] o.s.b.f.s.DefaultListableBeanFactory     : Overriding bean definition for bean 'beanNameViewResolver': replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]]
2016-03-16 14:02:58.886  INFO 5252 --- [           main] e.j.JettyEmbeddedServletContainerFactory : Server initialized with port: 8080
2016-03-16 14:02:58.889  INFO 5252 --- [           main] org.eclipse.jetty.server.Server          : jetty-9.2.4.v20141103
2016-03-16 14:02:58.925  INFO 5252 --- [           main] /                                        : Initializing Spring embedded WebApplicationContext
2016-03-16 14:02:58.925  INFO 5252 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1198 ms
2016-03-16 14:02:59.490  INFO 5252 --- [           main] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
2016-03-16 14:02:59.494  INFO 5252 --- [           main] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'characterEncodingFilter' to: [/*]
2016-03-16 14:02:59.496  INFO 5252 --- [           main] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2016-03-16 14:02:59.497  INFO 5252 --- [           main] o.e.jetty.server.handler.ContextHandler  : Started o.s.b.c.e.j.JettyEmbeddedWebAppContext@31024624{/,file:/H:/demo/spring-boot/src/main/webapp/,AVAILABLE}
2016-03-16 14:02:59.497  INFO 5252 --- [           main] org.eclipse.jetty.server.Server          : Started @2862ms
2016-03-16 14:02:59.695  INFO 5252 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@704921a5: startup date [Wed Mar 16 14:02:57 CST 2016]; root of context hierarchy
2016-03-16 14:02:59.741  INFO 5252 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2016-03-16 14:02:59.741  INFO 5252 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[text/html],custom=[]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest)
2016-03-16 14:02:59.764  INFO 5252 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-03-16 14:02:59.764  INFO 5252 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-03-16 14:02:59.799  INFO 5252 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-03-16 14:02:59.940  INFO 5252 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2016-03-16 14:02:59.950  INFO 5252 --- [           main] /                                        : Initializing Spring FrameworkServlet 'dispatcherServlet'
2016-03-16 14:02:59.950  INFO 5252 --- [           main] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
2016-03-16 14:02:59.964  INFO 5252 --- [           main] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 14 ms
2016-03-16 14:03:00.031  INFO 5252 --- [           main] o.eclipse.jetty.server.ServerConnector   : Started ServerConnector@6594402a{HTTP/1.1}{0.0.0.0:8080}
2016-03-16 14:03:00.034  INFO 5252 --- [           main] .s.b.c.e.j.JettyEmbeddedServletContainer : Jetty started on port(s) 8080 (http/1.1)
2016-03-16 14:03:00.036  INFO 5252 --- [           main] Example                                  : Started Example in 2.979 seconds (JVM running for 3.401)


自定义内嵌servlet容器

如果要对内嵌的servlet进行配置,有如下三种方法:

1.通过SpringEnvironment属性进行配置
  • 你会把这些属性定义到application.properties.
  • server.port -进来的HTTP请求的监听端口号
  • server.address-绑定的接口地址
  • server.sessionTimeout-session超时时间
2.编程方式的自定义


3.直接自定义ConfigurableEmbeddedServletContainer

  •    可以自己注册TomcatEmbeddedServletContainerFactory, JettyEmbeddedServletContainerFactory或UndertowEmbeddedServletContainerFactory


以下是SpringBoot 推荐的基础POM文件,具体应用在下次学习中继续与大家分享。



猜你喜欢

转载自blog.csdn.net/chunzhiyan/article/details/50904150