Spring Boot提供了一种新的编程范式,能在最小的阻力下开发Spring应用程序,可以更加敏捷地开发Spring应用程序,专注于应用程序的功能,不用在Spring的配置上多花功夫,甚至完全不用配置。
Springboot最重要的是以下四个核心:
自动配置:针对很多Spring应用程序常见的应用功能,Spring Boot能自动提供相关配置。
起步依赖:告诉Spring Boot需要什么功能,它就能引入需要的库。起步依赖其实就是特殊的Maven依赖和Gradle依赖,利用了传递依赖解析,把常用库聚合在一起,组成了几个为特定功能而定制的依赖。
命令行界面:这是Spring Boot的可选特性,借此你只需写代码就能完成完整的应用程序,无需传统项目构建。
Actuator:让你能够深入运行中的Spring Boot应用程序。Actuator提供在运行时检视应用程序内部情况的能力。安装了Actuator就能窥探应用程序的内部情况,包括如下细节:
Spring应用程序上下文里配置的Bean
Spring Boot的自动配置做的决策
应用程序取到的环境变量、系统属性、配置属性和命令行参数
应用程序里线程的当前状态
应用程序最近处理过的HTTP请求的追踪情况
各种和内存用量、垃圾回收、Web请求以及数据源用量相关的指标
创建Spring Boot 项目
1、使用 Spring Initializr 创建 Springboot 项目。
Spring Initializr有几种用法:
通过Web界面使用。
通过Spring Tool Suite使用。
通过IntelliJ IDEA使用。
使用Spring Boot CLI使用
本人常用的通过官网web界面创建和IDEA创建,这里介绍这种方式。
(1)、通过官网web界面创建
(a)、浏览器打开start.spring.io,如下图:
左侧根据你需要选择项目类型、编程语言、Springboot版本、打包方式、Java版本,输入项目信息,右侧还可以选择需要的依赖,下面有三个按钮GENERATE、EXPLORE、SHARE。点击GENERAE直接下载,点击EXPLORE弹出一个页面可以展示生成的代码,再点击download进行下载。SHARE可以复制创建springboot的路径。
(b)、将下载的压缩包解压到计算机中,这就是Springboot最基本的项目架构了。
(2)、IDEA创建Springboot项目
(a)、打开IDEA,依次点击File-->New-->project,出现如下界面:
红色方框里的地址是不是和上一种方式的地址一样?其实IDEA创建本质上也和上一样的,都是从这个网址创建,不过IDEA自动帮我们做了。
(b)、点击Next出现如下界面,也和上一种方式类似,输入项目信息,选择项目类型,Java版本,打包方式等。
(c)、继续点击Next出现如下界面,是不是也很熟悉,这里选择依赖、springboot版本。
(d)、继续点击Next出现如界面,输入项目名称,选择项目路径,点击Finish完成创建。
这两种方式是使用Spring Initializr 创建Springboot项目,Springboot也是一种Maven项目,还有一种就是创建Maven项目的方式进行创建。
2、Maven创建Springboot项目
先创建Maven项目再将Springboot特有的依赖加入到pom中
在包根目录下创建一个带@SpringBootApplication注解的main方法类。
自动配置
@SpringBootApplication注解的类在Spring Boot应用程序里有两个作用:配置和启动引导。@SpringBootApplication 开启了Spring的组件扫描和Spring Boot的自动配置功能。实际上, @SpringBootApplication 将三个有用的注解组合在了一起:
Spring的 @Configuration :标明该类使用Spring基于Java的配置。
Spring的 @ComponentScan :启用组件扫描,这样你写的Web控制器类和其他组件才能被自动发现并注册为Spring应用程序上下文里的Bean。
Spring Boot 的 @EnableAutoConfiguration : 这 个 不 起 眼 的 小 注 解 也 可 以 称 为@Abracadabra,就是这一行配置开启了Spring Boot自动配置的魔力,让你不用再写成篇的配置了。
Spring 4.0引入条件化配置,条件化配置允许配置存在于应用程序中,但在满足某些特定条件之前都忽略这个配置。Spring Boot运用条件化配置的方法是,定义多个特殊的条件化注解,并将它们用到配置类上。这些条件化配置类构成了Springboot的自动配置。
自动配置中使用的条件化注解:
@ConditionalOnBean 配置了某个特定Bean
@ConditionalOnMissingBean 没有配置特定的Bean
@ConditionalOnClass Classpath里有指定的类
@ConditionalOnMissingClass Classpath里缺少指定的类
@ConditionalOnExpression 给定的Spring Expression Language(SpEL)表达式计算结果为 true
@ConditionalOnJava Java的版本匹配特定值或者一个范围值
@ConditionalOnJndi 参数中给定的JNDI位置必须存在一个,如果没有给参数,则要有JNDI InitialContext
@ConditionalOnProperty 指定的配置属性要有一个明确的值
@ConditionalOnResource Classpath里有指定的资源
@ConditionalOnWebApplication 这是一个Web应用程序
@ConditionalOnNotWebApplication 这不是一个Web应用程序
自定义配置
springboot可以使用两种影响自动配置的方式,使用显式配置进行覆盖和使用属性进行精细化配置。
覆盖 Spring Boot 自动配置
大多数情况下,自动配置的Bean刚好能满足你的需要,不需要去覆盖它们。但某些情况下,Spring Boot在自动配置时还不能很好地进行推断。我们可以在了解自动配置提供了什么之后,我们再来覆盖基础的安全配置,以满足特定的场景需求。
1、创建自定义的配置
覆盖自动配置很简单,就当自动配置不存在,直接显式地写一段配置。这段显式配置的形式不限,Spring支持的XML和Groovy形式配置都可以。Spring Boot会发现你的配置,随后降低自动配置的优先级,以你的配置为准。
2、通过属性文件外置配置
Spring Boot应用程序有多种设置途径。Spring Boot能从多种属性源获得属性,包括
如下几处。
(1) 命令行参数
(2) java:comp/env 里的JNDI属性
(3) JVM系统属性
(4) 操作系统环境变量
(5) 随机生成的带 random.* 前缀的属性(在设置其他属性时,可以引用它们,比如 ${random.long} )
(6) 应用程序以外的application.properties或者appliaction.yml文件
(7) 打包在应用程序内的application.properties或者appliaction.yml文件
(8) 通过 @PropertySource 标注的属性源
(9) 默认属性
这个列表按照优先级排序,也就是说,任何在高优先级属性源里设置的属性都会覆盖低优先级的相同属性
application.properties和application.yml文件能放在以下四个位置。
(1) 外置,在相对于应用程序运行目录的/config子目录里。
(2) 外置,在应用程序运行的目录里。
(3) 内置,在config包内。
(4) 内置,在Classpath根目录。
这个列表按照优先级排序,高优先级位置的配置会覆盖低优先级位置的配置。
自动配置微调
springboot有300多个属性可以用来微调Spring Boot应用程序里的Bean。下面列举几个例子:
1、禁用模板缓存
spring.thymeleaf.cache(thymeleaf模板)
spring.freemarker.cache (Freemarker)
spring.groovy.template.cache (Groovy模板)
spring.velocity.cache (Velocity)
默认情况下,这些属性都为 true ,也就是开启缓存。将它们设置为 false 即可禁用缓存。
2、配置嵌入式服务器
springboot内置服务器(Tomcat),运行Spring Boot应用程序时,应用程序会启动一个嵌入式的服务器(默认是Tomcat),监听8080端口。
server.port(配置端口)
server.ssl.key-store(密钥存储文件的存放路径)
server.ssl.key-store-password和server.ssl.key-password(创建秘钥文件时给定的密码)
3、4配置日志
默认情况下,Spring Boot会用Logback来记录日志,并用 INFO 级别输出到控制台。如果决定使用Log4j或者Log4j2,那么你只需要修改依赖,引入对应该日志实现的起步依赖,同时排除掉Logback。在配置文件可以配置日志等级、路径等信息。
4、配置数据源
通过属性配置数据库的URL和身份信息就可以了。
5、使用 Profile 进行配置
当应用程序需要部署到不同的运行环境时,可以使用基于Profile的配置。Profile是一种条件化配置,基于运行时激活的Profile,会使用或者忽略不同的Bean或配置类。设置 spring.profiles.active 属性就能激活Profile,任意设置配置属性的方式都能用于设置这个值。
spring.profiles.active=production
为每个环境分别创建配置,使用特定于Profile的属性文件,如application-{profile}.properties,application-{profile}.yml。
6、定制应用程序错误页面
Spring Boot自动配置的默认错误处理器会查找名为error的视图,如果找不到就用默认的白标错误视图
最简单的方法就是创建一个自定义视图,让解析出的视图名为error。这一点归根到底取决于错误视图解析时的视图解析器。
实现了Spring的View接口的Bean,其ID为error(由Spring的 BeanNameViewResolver所解析)。
如果配置了Thymeleaf,则有名为error.html的Thymeleaf模板。
如果配置了FreeMarker,则有名为error.ftl的FreeMarker模板。
如果配置了Velocity,则有名为error.vm的Velocity模板。
如果是用JSP视图,则有名为error.jsp的JSP模板。
错误页有两处特别的信息需要呈现:错误的请求路径和异常消息。默认情况下,Spring Boot会为错误视图提供如下错误属性。
timestamp :错误发生的时间。
status :HTTP状态码。
error :错误原因。
exception :异常的类名。
message :异常消息(如果这个错误是由异常引起的)。
errors : BindingResult 异常里的各种错误(如果这个错误是由异常引起的)。
trace :异常跟踪信息(如果这个错误是由异常引起的)。
path :错误发生时请求的URL路径。