Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
SpringBoot系列-1入门
相关介绍
官网:https://projects.spring.io/spring-boot
官方应用: SpringBoot->SpringCloud>微服务
Spring Boot不是一门新技术。从本质上来说,Spring Boot就是Spring,它做了那些没有它你也会去做的Spring Bean配置。它使用“习惯优于配置”(项目中存在大量的配置,此外还内置了一个习惯性的配置,让你无需手动进行配置)的理念让你的项目快速运行起来。使用Spring Boot很容易创建一个独立运行(运行jar,内嵌Servlet容器)、准生产级别的基于Spring框架的项目,使用Spring Boot基本上可以不用或者只需要很少的Spring配置
SpringBoot精要
SpringBoot是伴随着Spring4.0诞生的
SpringBoot帮助开发者快速启动一个Web容器
SpringBoot继承了原有Spring框架的优秀基因
SpringBoot简化了使用Spring的过程
自动配置:针对很多Spring应用程序常见的应用功能,Spring Boot能自动提供相关配置
起步依赖:告诉Spring Boot需要什么功能,它就能引入需要的库。
命令行界面:这是Spring Boot的可选特性,借此你只需写代码就能完成完整的应用程序,无需传统项目构建。
Actuator:让你能够深入运行中的Spring Boot应用程序,探测各种指标。
springboot使开发更简单
springboot使配置更简单
功能的组合配置:
从XML config -> Java config
Bean 注入 -> Autowire
部署环境配置:
从多个 *peoperties -> 单个 Application.yml(或者properties)
springboot使监控更简单:
spring-boot-actuator:
/configpros 查看属性配置
/dump 线程工作状态
/env/{name} 环境变量
/metrics/{name} JVM性能指标
/mappings RestFul Path 与服务类的映射关系
springboot使服务化开发更简单:
多个client >>> 通过Api接口 <<< Rest API>>> 多个Springboot SPI
系统要求
目前Spring Boot最新正式版为1.5.8.RELEASE
默认情况下,Spring Boot 1.5.X.RELEASE需要Java 7和Spring Framework 4.3以上或更高版本,我们可以使用Spring Boot with Java 6和一些额外的配置(不建议),使用Maven(3.2+)或Gradle 2(2.9或更高版本)和3来构建。
大家可以使用Java 6或7的Spring Boot,通常推荐Java 8。 本次统一使用Java 1.8,Spring Boot 1.5.1.RELEASE以及Maven3.3.9版本。开发工具使用STS
快速入门
传统Spring MVC开发一个简单的Hello World Web应用程序,你应该做什么?
一个项目结构,其中有一个包含必要依赖的Maven或者Gradle构建文件,最起码要有Spring MVC和Servlet API这些依赖。
一个web.xml文件(或者一个WebApplicationInitializer实现),其中声明了Spring的DispatcherServlet。
一个启动了Spring MVC的Spring配置
一控制器类,以“hello World”相应HTTP请求。
一个用于部署应用程序的Web应用服务器,比如Tomcat。
最让人难以接受的是,这份清单里面只有一个东西是和Hello World功能相关的,即控制器,剩下的都是Spring开发的Web应用程序必需的通用模板。
接下来看看Spring Boot如何搞定? 很简单,我仅仅只需要非常少的几个配置就可以迅速方便的搭建起来一套web项目
SpringBoot系列-2配置
Spring Boot使用了一个全局的配置文件application.properties,放在src/main/resources目录下或者类路径的/config下。Sping Boot的全局配置文件的作用是对一些默认配置的配置值进行修改。
1、自定义属性
2、参数引用
3、引用自定义配置文件
4、配置随机值
5、内置属性配置
配置文件加载优先级
application.properties和application.yml文件可以放在一下四个位置:
外置:在相对于应用程序运行目录的/congfig子目录里。
外置:在应用程序运行的目录里
内置:在config包内
内置:在Classpath根目录
同样,这个列表按照优先级排序,也就是说,src/main/resources/config下application.properties覆盖src/main/resources下application.properties中相同的属性
如果你在相同优先级位置同时有application.properties和application.yml,那么application.yml里面的属性就会覆盖application.properties里的属性。
Profile-多环境配置
当应用程序需要部署到不同运行环境时,一些配置细节通常会有所不同,最简单的比如日志,生产日志会将日志级别设置为WARN或更高级别,并将日志写入日志文件,而开发的时候需要日志级别为DEBUG,日志输出到控制台即可。
如果按照以前的做法,就是每次发布的时候替换掉配置文件,这样太麻烦了,Spring Boot的Profile就给我们提供了解决方案,命令带上参数就搞定。
在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,比如:
application-dev.properties:开发环境
application-prod.properties:生产环境
想要使用对应的环境,只需要在application.properties中使用spring.profiles.active属性来设置,值对应上面提到的{profile},这里就是指dev、prod这2个。
或者用命令行启动的时候带上参数: java -jar xxx.jar --spring.profiles.active=dev
SpringBoot系列-3启动解析
1、@SpringBootApplication 2、SpringBootApplication.run()
SpringBoot执行流程
SpringApplication的run方法的实现程序运行的主要线路,该方法的主要流程大体可以归纳如下:
1) 如果我们使用的是SpringApplication的静态run方法,那么,这个方法里面首先要创建一个SpringApplication对象实例,然后调用这个创建好的SpringApplication的实例方法。在SpringApplication实例初始化的时候,它会提前做几件事情: 根据classpath里面是否存在某个特征类(org.springframework.web.context.ConfigurableWebApplicationContext)来决定是否应该创建一个为Web应用使用的ApplicationContext类型。 使用SpringFactoriesLoader在应用的classpath中查找并加载所有可用的ApplicationContextInitializer。 使用SpringFactoriesLoader在应用的classpath中查找并加载所有可用的ApplicationListener。 推断并设置main方法的定义类。
2) SpringApplication实例初始化完成并且完成设置后,就开始执行run方法的逻辑了,方法执行伊始,首先遍历执行所有通过SpringFactoriesLoader可以查找到并加载的SpringApplicationRunListener。调用它们的started()方法,告诉这些SpringApplicationRunListener,“嘿,SpringBoot应用要开始执行咯!”。
3) 创建并配置当前Spring Boot应用将要使用的Environment(包括配置要使用的PropertySource以及Profile)。
4) 遍历调用所有SpringApplicationRunListener的environmentPrepared()的方法,告诉他们:“当前SpringBoot应用使用的Environment准备好了咯!”。
5) 如果SpringApplication的showBanner属性被设置为true,则打印banner。
6) 根据用户是否明确设置了applicationContextClass类型以及初始化阶段的推断结果,决定该为当前SpringBoot应用创建什么类型的ApplicationContext并创建完成,然后根据条件决定是否添加ShutdownHook,决定是否使用自定义的BeanNameGenerator,决定是否使用自定义的ResourceLoader,当然,最重要的,将之前准备好的Environment设置给创建好的ApplicationContext使用。
7) ApplicationContext创建好之后,SpringApplication会再次借助Spring-FactoriesLoader,查找并加载classpath中所有可用的ApplicationContext-Initializer,然后遍历调用这些ApplicationContextInitializer的initialize(applicationContext)方法来对已经创建好的ApplicationContext进行进一步的处理。
8) 遍历调用所有SpringApplicationRunListener的contextPrepared()方法。
9) 最核心的一步,将之前通过@EnableAutoConfiguration获取的所有配置以及其他形式的IoC容器配置加载到已经准备完毕的ApplicationContext。
10) 遍历调用所有SpringApplicationRunListener的contextLoaded()方法。
11) 调用ApplicationContext的refresh()方法,完成IoC容器可用的最后一道工序。
12) 查找当前ApplicationContext中是否注册有CommandLineRunner,如果有,则遍历执行它们。
13) 正常情况下,遍历执行SpringApplicationRunListener的finished()方法、(如果整个过程出现异常,则依然调用所有SpringApplicationRunListener的finished()方法,只不过这种情况下会将异常信息一并传入处理)
SpringBoot系列-4Web应用
项目结构推荐
root package结构:com.example.demo应用启动类
Application.java置于root package下,这样使用
@ComponentScan注解的时候默认就扫描当前所在类的package
实体(Entity)置于com.example.demo.domain包下
逻辑层(Service)置于com.example.demo.service包下
controller层(web)置于com.example.demo.controller层包下
static可以用来存放静态资源
templates用来存放默认的模板配置路径
Spring MVC自动配置
Spring Boot为Spring MVC提供适用于多数应用的自动配置功能。在Spring默认基础上,自动配置添加了以下特性:
1、引入ContentNegotiatingViewResolver和BeanNameViewResolver beans。
2、对静态资源的支持,包括对WebJars的支持。
3、自动注册Converter,GenericConverter,Formatter beans。
4、对HttpMessageConverters的支持。
5、自动注册MessageCodeResolver。
6、对静态index.html的支持。
7、对自定义Favicon的支持。
如果想全面控制Spring MVC,你可以添加自己的@Configuration,并使用@EnableWebMvc对其注解。如果想保留Spring Boot MVC的特性,并只是添加其他的MVC配置(拦截器,formatters,视图控制器等),你可以添加自己的WebMvcConfigurerAdapter类型的@Bean(不使用@EnableWebMvc注解)
静态文件
默认情况下,Spring Boot从classpath下一个叫/static(/public,/resources或/META-INF/resources)的文件夹或从ServletContext根目录提供静态内容。这使用了Spring MVC的ResourceHttpRequestHandler,所以你可以通过添加自己的WebMvcConfigurerAdapter并覆写addResourceHandlers方法来改变这个行为(加载静态文件)。
在一个单独的web应用中,容器默认的servlet是开启的,如果Spring决定不处理某些请求,默认的servlet作为一个回退(降级)将从ServletContext根目录加载内容。大多数时候,这不会发生(除非你修改默认的MVC配置),因为Spring总能够通过DispatcherServlet处理请求。
此外,上述标准的静态资源位置有个例外情况是Webjars内容。任何在/webjars/**路径下的资源都将从jar文件中提供,只要它们以Webjars的格式打包。
注:如果你的应用将被打包成jar,那就不要使用src/main/webapp文件夹。尽管该文件夹是一个共同的标准,但它仅在打包成war的情况下起作用,并且如果产生一个jar,多数构建工具都会忽略它
默认资源映射
Spring Boot 默认为我们提供了静态资源处理,使用 WebMvcAutoConfiguration 中的配置各种属性。 建议大家使用Spring Boot的默认配置方式,提供的静态资源映射如下:
classpath:/META-INF/resources
classpath:/resources
classpath:/static
classpath:/public
优先级顺序为:META-INF/resources > resources > static > public
可以在application.properties中修改:
# 默认值为 /**
spring.mvc.static-path-pattern
# 默认值为 classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
spring.resources.static-locations=这里设置要指向的路径,多个使用英文逗号隔开
模板引擎
Spring Boot支持多种模版引擎包括:
1、FreeMarker
2、Groovy
3、Thymeleaf(官方推荐)
4、Mustache
JSP技术Spring Boot官方是不推荐的,原因有三:
1、tomcat只支持war的打包方式,不支持可执行的jar。
2、Jetty 嵌套的容器不支持jsp
3、Undertow 创建自定义error.jsp页面不会覆盖错误处理的默认视图,而应该使用自定义错误页面
当你使用上述模板引擎中的任何一个,它们默认的模板配置路径为:src/main/resources/templates。当然也可以修改这个路径,具体如何修改,可在各模板引擎的配置属性中查询并修改。
SpringBoot系列-5数据库
Mybatis整合
SpringBoot集成 https://github.com/mybatis/spring-boot-starter/wiki/Quick-Start
Mybatis分页插件: https://github.com/pagehelper/Mybatis-PageHelper
本文由 小马哥 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:
2017/11/23 01:28
求tale皮肤 你这个特效蛮炫酷的
可以 发你邮箱.顺便加个友链