SpringBoot起步依赖原理
spring-boot-starter-parent
依赖管理:主要定义了版本信息。大部分技术的版本在经过组合测试不会产生冲突后,会在父工程中确定好并锁定。用户在使用时,不需要自己挑选和组合不同技术版本,避免了版本冲突问题
spring-boot-starter-web
依赖传递:starter-web依赖于特定的坐标(如下图所示),项目依赖于starter-web,则项目间接依赖于这些坐标。用户在使用时只需要导入一个starter-web,而不需要自己将所需坐标一个个进行导入,简化了操作
总结
- 在spring-boot-starter-parent中定义了各种技术的版本信息,组合了一套最优搭配的技术版本。
- 在各种starter中,定义了完成该功能需要的坐标合集,其中大部分版本信息来自于父工程。
- 我们的工程继承parent,引入starter后,通过依赖传递,就可以简单方便获得需要的jar包,并且不会存在版本冲突等问题
SpringBoot配置
配置文件分类
- properties:
server.port=8080
- yml(yaml):
server: port: 8080
1.properties
在resources/application.properties(自动生成)中配置端口(默认为8080),然后启动项目,可以看到端口已经改为8081
2.yml(yaml)
yml(yaml)文件同理,但是文件需要自己新建
基本语法
- 大小写敏感
- 数据值前面必须有空格,作为分隔符
- 使用缩进表示层级关系
- 缩进不允许使用Tab键,只允许使用空格
- 使用#表示注释
数据格式
- 对象(map):键值对的集合
person: name: zhangsan #行内写法 person: { name: zhangsan}
- 数组
address: - beijing - shanghai #行内写法 address: [beijing,shanghai]
- 纯量
msg1: 'hello \n world' #单引忽略转义字符 msg2: 'hello \n world' #双引识别转义字符
参数引用
name: lisi
person:
name: ${
name} #引用上面定义的name值
优先级
在同级目录下,优先级
properties > yml > yaml
读取配置内容
- @Value
- Environment
- @ConfigurationProperties
yml配置文件:
name: abc
#对象
person:
name: zhangsan
age: 20
#数组
address:
- beijing
- shanghai
1.@Value:单个注入
在java文件中读取配置内容
@Value("${name}")
private String name;
//对象
@Value("${person.name}")
private String name2;
//数组
@Value("${address[0]}")
private String address;
2.Environment:全部注入
//注入方式
@Autowired
private Environment env;
//使用方式
System.out.println(env.getProperty("person.name"));
System.out.println(env.getProperty("address[0]"));
注意不要导错包
3.@ConfigurationProperties:部分注入
yml配置文件
person:
name: zhangsan
age: 20
address:
- beijing
- shanghai
Person类
package com.study.springbootinit;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "person") //获取对象"person"中的两个值
public class Person {
//须与配置文件中的名称相同
private String name;
private int age;
private String[] address;
public String[] getAddress() {
return address;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
打印数据
//注入Person
@Autowired
private Person person;
@RequestMapping("/hello2")
public String Hello2() {
System.out.println(person);//打印name和age
String[] address = person.getAddress();
for (String s : address) {
System.out.println(s);
}//打印address
return "hello Spring Boot!";
}
使用@ConfigurationProperties注解之后弹出红框的解决方式
点击右侧的Open documentation,打开Spring的网页,将这一段依赖加入到pom文件中,然后刷新Maven(否则会报错)
导入依赖后,在配置文件中写代码的时候就会有提示功能(自动补全)
profile
1.多profile文件方式
在resources文件夹中新建三个文件dev(开发环境)、test(测试环境)和pro(生产环境)
激活方式
在application文件中激活
spring.profiles.active=pro #使用后缀选择激活文件
启动测试可以看到pro被激活
2.yml多文档方式
只需新建一个application.yml文件
#使用---分隔符
---
server:
port: 8081
spring:
profiles: dev
---
server:
port: 8082
spring:
profiles:
active: test #被激活的文件
---
server:
port: 8083
spring:
profiles: pro
---
内部配置加载顺序
- file:./config/ 当前项目下的/config目录
- file:./ 当前项目的根目录
- classpath:/config/ classpath的/config目录
- classpath:/ classpath的根目录
排列顺序即为加载顺序,SpringBoot程序启动时,差异配置依次读取,相同配置使用最高优先级
提示:main中的java和resources文件会被打包到 classpath:/目录