SpringBoot
1. 概述
1.1 为什么选择SpringBoot
传统Spring 缺点
- 配置繁琐
虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。 - 依赖繁琐
项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标,而且还需要分析导入与之有依赖关系的其他库坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。
SpringBoot 优势
- 自动配置
Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是SpringBoot自动完成的。 - 起步依赖
起步依赖本质上是一个Maven项目对象模型,定义了对其他库的传递依赖。简单的说,起步依赖就是将具备同种功能的坐标打包到一起,并提供一些默认的功能,避免了版本的不兼容。 - 辅助功能
提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等。Spring Boot 并不是对 Spring 功能上的增强,而是提供了一种快速使用 Spring 的方式。
简单的说
2. 如何快速搭建一个SpringBoot项目
第一步:
点击这个链接:SpringBoot快速搭建
或者搜索Spring官网,点击Project下的SpringBoot,然后移动到页面最下方,点击快速构建的Spring Initializr即可
第二步:
想导入更多依赖可以点开add dependencies,做好这些后点击下方的generate下载。
第三步:
将下载后的zip解压后放到任意目录,然后由idea打开即可。
3. SpringBoot配置
SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置。以下是application.properties和application.yml(application.yaml)写法。
ps:一定要注意,在写yml(yaml)过程中键:(空格)值,键值对间,冒号后一定要加上空格!
在同一级目录下优先级为:properties > yml > yam
YML(YMAL)配置
YML(YAML)全称是 Ain’t Markup Language 。YAML是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅
读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP
等。YML文件是以数据为核心的,比传统的xml方式更加简洁。
YAML文件的扩展名可以使用.yml或者.yaml
YAML数据格式
server:
port: 8083
#server: {port: 8083}
# 数组
address:
- dalian
- beijing
#address: [dalian,beijing]
# 纯量
str1: 'hello \n world' #会忽略转义字符
str2: "hello \n world" #会识别转义字符
# 对象
person:
name: 王1
age: 20
address:
- dalian
- shanghai
#person: {name: 王1,age: 20}
name: ${person.name} #参数引用
读取配置
读取配置内容有三种方法,接下一一赘述
1. @Value
@Value("${配置中的名字}”)
private 类型 自定义名字;//用来接收配置文件中的值
2. Environment
@Autowired //自动装配
private Environment env;
env.getProperty(“配置中的名字”);//用这种方式来获取
3.@ConfigurationProperties (用对象接收)
package dut.zimo.Model;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @author : Dut.zimo
* @createTime : 2021/12/19 8:34
*/
@Component //表示他是个bean
@ConfigurationProperties(prefix = "person")
public class person {
private String name;
private int age;
private String [] address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String[] getAddress() {
return address;
}
public void setAddress(String[] address) {
this.address = address;
}
@Override
public String toString() {
return "person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
代码演示
package dut.zimo.Controller;
import dut.zimo.Model.person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
//方法1:
@Value("${name}")
private String username;
@Value("${person.age}")
private int personage;
@Value("${address[0]}")
private String address;
@Value("${str1}")
private String msg1;
@Value("${str2}")
private String msg2;
//方法2:
@Autowired
private Environment env;
//方法3:
@Autowired
private person p1;
public HelloController() {
}
@RequestMapping("/hellovalue" )
public void hellovalue(){
System.out.println("----------------方法1:--------------------");
System.out.println("username: "+username);
System.out.println("personage: "+personage);
System.out.println("address: "+address);
System.out.println("msg1: "+msg1);
System.out.println("msg2: "+msg2);
System.out.println("----------------方法2:--------------------");
System.out.println(env.getProperty("name"));
System.out.println(env.getProperty("person.age"));
System.out.println(env.getProperty("address[1]"));
System.out.println("----------------方法3:--------------------");
System.out.println(p1);
for (String add : p1.getAddress()){
System.out.println(add);
}
}
@RequestMapping("/hello" )
public String hello(){
return "hello SpringBoot";
}
}
4. SpringBoot多环境配置
profile配置方式
1. 多profile文件方式
application-dev.properties:开发模式
server.port=8081
application-test.properties:测试模式
server.port=8082
application-pro.properties:生产模式
server.port=8083
最后由application.properties来调用哪个模式
spring.profiles.active=test
运行结果:
2. yml多文档方式
# 激活配置
spring:
profiles:
active: "pro"
---
# -----第一部分
spring:
config:
activate:
on-profile: "dev"
env: dev
server:
port: 8081
---
# -----第二部分
spring:
config:
activate:
on-profile: "test"
env: test
server:
port: 8082
---
# -----第三部分
spring:
config:
activate:
on-profile: "pro"
env: pro
server:
port: 8083
运行结果
profile激活方式
⚫ 配置文件: 在配置文件中配置:spring.profiles.active=dev
⚫ 命令行参数:java –jar xxx.jar --spring.profiles.active=dev
先打jar包
5. 配置加载顺序
加载顺序为上文的排列顺序,高优先级配置的属性会生效,相同的信息优先级高的覆盖优先级低的,没有的信息,则由优先级低的补充。
外部配置补充加载
在用命令行模式运行jar包时候,优先读取外部配置,然后才运行代码中的配置!注意内部配置中的第一第二优先级并不会被打入jar包,故jar包中没有这两个配置信息!外部配置读取时,优先读取与jar包同级的config文件下的application.properties文件,其次读取同级下的application.properties文件。