本文链接:http://note.youdao.com/noteshare?id=9954ab4cc1dd3fb30e3db8235a939fb9
一、开发第一个应用程序
启动引导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