为什么要用Spring Boot?
简而言之,从本质上来说,Spring Boot就是Spring,它做了那些没有它你自己也会去做的SpringBean配置。有了它,你可以更加专注于应用程序的逻辑。
Spring Boot精要
最重要的是以下四个核心:
- 自动配置:针对很多Spring应用程序常见的应用功能,Spring Boot能自动提供相关配置。
- 起步依赖: 告诉Spring Boot需要什么功能,它就能引入需要的库。
- 命令行界面:这是Spring Boot的可选特性,借此你只需写代码就能完成完整的应用程序,无需构建传统项目构建。
- Actuator:让你能够深入运行中的Spring Boot应用程序,一探究竟。
简单介绍
可以使用Spring Initializr初始化一个Spring Boot工程。
使用起步依赖
Spring Boot通过提供众多起步依赖降低项目依赖的复杂度。起步依赖本质上是一个Maven项目对象模型,定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。
如果你是选择Maven工程,你将看见pom.xml文件:
例如,在pom.xml文件中添加一个起步依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
覆盖起步依赖引入的传递依赖
比如:排除掉Web起步依赖的Jackson:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-web</artifactId>
<groupId>com.fasterxml.jackson.core</groupId>
</exclusion>
</exclusions>
</dependency>
你也可以指定另一个版本Jackson来进行构建:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.3</version>
</dependency>
使用自动配置
针对很多Spring应用程序常见的应用功能,Spring Boot能自动提供相关配置,让开发者专注于应用程序功能。简而言之,这是一个运行时的过程。
比如:Thymeleaf是不是在Classpath里?如果是,则配置Thymeleaf的模板解析器、视图解析器以及模板引擎。
自定义配置
覆盖Spring Boot自动配置
覆盖自动配置很简单,就当自动配置不存在,直接显示地写一段配置。
通过属性文件外置配置
创建一个名为application.yml的文件或者application.properties的文件即可。
自动配置微调
这里以YAML文件为准。
比如配置嵌入式服务器:
server:
port: 8000
应用程序Bean的配置外置
在application.yml里设置一个属性:
amazon:
associate_id: habuma-20
在一个类里面收集属性:
@Component
@ConfigurationProperties("amazon")
public class AmazonProperties {
private String associateId;
public void setAssociateId(String associateId) {
this.associateId = associateId; //associateId的setter方法
}
public String getAssociateId() {
return associateId;
}
}
@ConfigurationProperties注解说明该Bean的属性应该是(通过setter方法)从配置属性值注入的。perfix属性说明AmazonProperties应该注入带amazon前缀的属性。
注入了AmazonProperties的ReadingListController:
@Controller
@RequestMapping("/")
public class ReadingListController {
private ReadingListRepository readingListRepository;
private AmazonProperties amazonConfig;
@Autowired
public ReadingListController(ReadingListRepository readingListRepository,
AmazonProperties amazonConfig) {
this.readingListRepository = readingListRepository;
this.amazonConfig = amazonConfig; //注入AmazonProperties
}
@RequestMapping(method=RequestMethod.GET)
public String readersBooks(Reader reader, Model model) {
List<Book> readingList = readingListRepository.findByReader(reader);
if (readingList != null) {
model.addAttribute("books", readingList);
model.addAttribute("reader", reader);
model.addAttribute("amazonID", amazonConfig.getAssociateId());//向模型中添加associateId
}
return "readingList";
}
}
使用Profile进行配置
Profile是一种条件化配置,基于运行时激活的Profile。
当应用程序需要部署到不同的运行环境时,一些配置细节通常会有所不同。
使用Profile YAML文件进行配置:
logging:
level:
root: DEBUG
spring:
profiles:
active: production #激活Profile
---
spring:
profiles: development
server:
port: 8001
---
spring:
profiles: production
server:
port: 8002
这个application.yml文件分为三个部分,第一段对全部Profile生效,第二段应用于开发环境,第三段应用于生成环境。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。