一、开发第一个应用程序

启动引导spring

@SpringBootApplication 开启了Spring的组件扫描和Spring Boot的自动配置功能;同时它也是将三个有用的注解组合在了一起。

@Configuration:表明该注类使用Spring基于Java的配置

@ComponentScan:启用组件扫描

@EnableAutoConfiguration:开启Spring Boot自动配置的功能

 

tip:如果你的应用程序需要Spring Boot自动配置以外的其他Spring配置,最好把它写到一个单独的用@Configuration标注的类里。

 

springboot的自动配置:向应用加入Spring Boot时,有个名为spring-boot-autoconfigure的JAR文件,包含很多配置。每个配置类都在应用程序的ClassPath中,都有机会为应用程序的配置添砖加瓦。在Spring4.0引入了Spring的条件化配置(condition),该配置允许配置存在应用程序中,但满足某些特定条件之前都忽略这个配置。

 

二、自定义配置

springboot设计加载配置的顺序是:先加载应用级配置随后再考虑自动配置类(通过设置的@condition条件来覆盖默认的自动配置类)。

自动配置微调:

1、禁用模版缓存(开发环境,模版只编译一次,不能实时看到效果)去掉缓存

spring:

thymeleaf:

cache:false

2、配置嵌入式服务器

server:

port:8080

ssh:

key-store: file://**/**

3、配置日志

默认情况下springboot会用logback来记录日志,并且用info级别输出到控制台。

如果用其他的日志,先排除掉起步依赖传递引入的日志起步依赖,然后再配置日志的相关内容。

4、应用程序Bean的配置外置

从配置文件中获取配置的信息(application.properties中的配置信息)

@ConfigurationProperties(pretix="amazon"),说明配置了该注解的类中的属性(通过setter方法)从配置属性值注入的,prefix说明属性的前缀是 amazon。

还可以封装一个bean,该bean中传入属性值,使用的时候注入这个bean获取属性值即可。

5、使用profile进行配置(应用场景:不同的部署环境使用的配置文件或配置的属性值不同,根据部署环境选择相应的配置)

@profile("production")配置再某个类上,使当profile激活为production使使用该类的相应配置

激活profile:application.properties

spring:

profiles:

active:production

创建不同环境对应的配置方式:

a、使用特定的profile的属性文件:application-{profile}.properties;对于公用的属性继续放在application.properties中。

b、使用多profile YAML文件进行配置:

logging:

level:

root: info

---

spring:

profile:development

logging:

level:

root: debug

---

spring:

profile:production

logging:

path: /tmp/

file: BookWorm.log

level:

root: warn

使用三个连字符(---)作为分隔符,第一段对全部profile生效,或者对那些未设置该属性的激活profile生效,第二段对开发环境生效,第三段对生产环境生效。

6、定制应用程序错误界面

springboot默认提供一个“白标”的错误页。根据所使用的视图解析器来确定使用的错误页面,如果使用了图片或者其他的静态资源的话,记得放在src/main/resources/static或src/main/resource/public中。

 

三、测试

1、集成测试自动配置

@RunWith(SpringJUnit4ClassRunner.class) 这是一个JUnit类运行器,会为JUnit测试加载Spring应用程序上下文,并为测试类自动注入所需的bean

@ContextConfigration(classes=***.class) 加载应用程序上下文

区别 SpringApplication不仅加载应用程序上下文、开启日志、加载外部属性(application.properties)和其他的springboot特性。

区别@SpringApplicationConfigration 与 SpringApplication 相同。大多数情况会用这个注解。

2、测试HTTP请求的两种方式

Spring Mock MVC:模拟Servlet容器里测试控制器

Web集成测试:在嵌入式Servlet容器(比如Tomcat或者Jetty)里启动应用程序,在真实的环境下测试

四、深入Actuator(探索Spring Boot内在的运行时的工作情况)

1、配置问题:

添加依赖:

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

由于springboot 2.0屏蔽了端点,需要在配置文件里打开,才能访问

managerment:

security:

enable: false

management:

endpoints:

web:

exposure:

include: "*"

2、Actuator 的端点

分类:配置端点、度量端点、其他端点

url:http://localhost:port/actuator/**

/beans:查看spring上下文里都有哪些依赖

/autoconfig:查看为什么会有这个bean或没有这个bean

/env:查看应用程序的环境属性列表(包括环境变量、JVM属性、命令行参数以及application.properties 提供的属性参数)

/mappings:应用发布的全部端点

/metrics:运行时数据

/trace:web请求的跟踪(最近的100个)

/dump:应用程序线程的快照

/health:应用程序的健康(up 健康;down 不健康)

/shutdown:关闭服务(非常危险,默认关闭的)

endpoint:

shutdown:

enabled: true

五、部署到应用服务器

1、数据库迁移

springboot的两种流行的数据库迁移提供了自动配置支持

Flyway

特点:

简单、使用sql定义迁移脚本、每个脚本一个版本号,脚本执行顺序:顺序执行

Liquibase

特点:

不局限特定的平台sql、支持多种格式(xml、yml、json、sql)

六、开发者工具

激活了开发者工具后,classpath里对文件做任何修改会触发应用程序重启

排除不重启文件配置:

spring:

devtools:

restart:

exclude: /static/**,/templates/**

关闭重启:

spring:

devtools:

restart:

enabled: false

只有修改特定的文件才重启:

spring:

devtools:

restart:

trigger-file: .trigger

 

liveReload:修改资源文件是自动触发浏览器刷新(需要浏览器下载rliveReload插件)

如果想要关闭此功能:

spring:

devtools:

livereload:

enabled: false