Spring Boot makes it easy to create stand-alone, production-grade Spring-based Applications that you can run.
1. 常见注解
@RequestMapping (@GetMapping & @PostMapping)
The @RequestMapping annotation provides “routing” information. It tells Spring that any HTTP request with the / path should be mapped to the home method.
@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。
@PostMapping是一个组合注解,是@RequestMapping(method = RequestMethod.POST)的缩写。
@RestController
The @RestController annotation tells Spring to render the resulting string directly back to the caller.
等价于 @Controller + @ResponseBody,为了使Http请求返回数据格式为json格式。
@EnableAutoConfiguration
Since spring-boot-starter-web added Tomcat and Spring MVC, the auto-configuration assumes that you are developing a web application and sets up Spring accordingly.
@ConditionalOnProperty
可以用来控制配置是否生效。
@SpringBootApplication
The @SpringBootApplication annotation is often placed on your main class, and it implicitly defines a base “search package” for certain items. same as @Configuration,@EnableAutoConfiguration,@ComponentScan.
1 | package com.example.myapplication; |
@Configuration
Declare the configuration Classes.
@EnableAutoConfiguration
If you find that specific auto-configuration classes that you do not want are being applied, you can use the exclude attribute of @EnableAutoConfiguration to disable them.
1 | import org.springframework.boot.autoconfigure.*; |
@EnableConfigurationProperties 和 @ConfigurationProperties
这两个注解的作用可以参见 Spring Boot 官方文档
1 |
|
1 | package org.spring.cloud.gateway; |
上述两个文件位于两个包下,如果在第一个文件中使用了@Component,则在第二个文件中就不能再使用@EnableConfigurationProperties注解,否则将会报错,提示有两个Bean。
如果第一个文件没有使用@Component则第二个文件可以将注释去掉。
单元测试常用注解
@RunWith(SpringJUnit4ClassRunner.class)
引入Spring对JUnit4的支持。
@SpringApplicationConfiguration(classes = HelloApplication.class)
指定SpringBoot的启动类
@WebAppConfiguration
开启Web应用配置,用于模拟ServletContext
@Before & @Test & @After
@Before:JUnit中定义在测试用例@Test内容执行前预加载的内容,同理判断。
2. Starter POMs
1 | <dependency> |
命名规则都是spring-boot-starter-,代表一个特别的应用功能模块。
spring-boot-starter-web
全栈Web开发模块,包含嵌入式的Tomcat、SpringMVC
spring-boot-starter-test
包含Junit、Hamcrest、Mockito
spring-boot-starter-actuator
为SpringBoot构建的应用提供一系列用于监控的端点。
访问:http://127.0.0.1:8080/actuator
可以看到输出了如下JSON文件:
1 | { |
spring-boot-devtools
(1) Property Defaults
(2) Automatic Restart
(3) LiveReload
(4) Global Settings
(5) Remote Applications
1 | <dependency> |
配置文件
SpringBoot的默认配置文件位置是src/main/resources/application.properties.
1 | <!-- application.properties --> |
应用中可以使用 @Vlaue注解来加载这些自定义的参数
1 |
|
Java代码中引用有以下两种方式:
- PlaceHolder方式 ${…}
- SpEL表达式 #{…}
通过application-{profile}多环境配置文件:
application-dev.properties:开发环境
application-test.properties:测试环境
application-prod.properties:生产环境
在application.properties中的spring.profiles.active属性来设置。
1 | // 调用测试环境 |
在采用java -jar xxx.jar 形式运行项目时,”–”就是对application.properties中的属性值进行赋值的标识。
配置文件的优先级顺序如下:
命令行输入 > 包外 > 包内
所以可以在利用这一点来对配置进行快速准确的更改。
spring.factories文件
Spring Factories实现原理(package org.springframework.core.io.support包下的SpringFactoriesLoader.class文件;)
Spring 容器初始化时会加载该文件声明的类,我们可以通过@SpringBootApplication->@EnableAutoConfiguration->AutoConfigurationImportSelector->getCandidateConfigurations->SpringFactoriesLoader
spring-core包里定义了SpringFactoriesLoader类,这个类实现了检索META-INF/spring.factories文件,并获取指定接口的配置的功能。在这个类中定义了两个对外的方法:
loadFactories: 根据接口类获取其实现类的实例,这个方法返回的是对象列表。
loadFactoryNames: 根据接口获取其接口类的名称,这个方法返回的是类名的列表。
bootstrap.yml和appllication.yml的区别
bootstrap.yml加载(父SpringApplicationContext)顺序在application.yml之前,用于应用程序上下文的引导阶段。用于指定spring.application.name和spring.cloud.config.server.git.uri以及一些加密和解密信息。
eg:Spring Cloud Config 配置中心再使用时,通常将访问远程文件配置信息写在bootstrap.yml文件中。