
SpringBoot基础系列文章
SpringBoot提供了3种配置文件的格式
server.port=81server:
port: 82server:
port: 83yml格式和yaml格式除了文件名后缀不一样,格式完全一样
2.4.0及以后**版本:application.yaml ➡️ application.yml ➡️ application.properties**2.4.0以前**版本:application.properties ➡️ application.yml ➡️ application.yaml**覆盖**低优先级,不同配置文件中不同配置**全部保留**(resources目录)**【最低-程序员】(resources目录下的config目录)**【项目经理】(jar包所在目录)**【运维】(jar包所在目录下config目录)**【最高-运维经理】空格**(不允许使用Tab键) 空格数量**不重要,只要**相同层级的元素左侧对齐**即可冒号+空格**作为分隔-**代替驼峰,如Java中的lastName,在yml中lastName或last-name都可正确映射单引号**不会转义【\n 则为普通字符串显示】**双引号**会转义【\n会显示为换行符】**空格**|**开头,大文本写在下层,保留文本格式,换行符正确显示**str1: 哈喽
str2: 哈喽
你好
呀
str3: '哈喽 \n 你好'
str4: "哈喽 \n 你好"
str5: |
哈喽
你好
# 转为json样式如下
{"str1":"哈喽","str2":"哈喽 你好 呀","str3":"哈喽 \\n 你好","str4":"哈喽 \n 你好","str5":"哈喽\n 你好"}true**、**yes**、**on**皆为真,不区分每个字母大小写**false**、**no**、**off**皆为假,不区分每个字母大小写**flag1: true
flag2: False
flag3: yes
flag4: NO
# 转为json样式如下
{"flag1":true,"flag2":false,"flag3":true,"flag4":false}
num1: 666
num2: 0001_0000 # 支持二进制、八进制、十六进制
# 转为json样式如下
{"num1":666,"num2":4096}f1: 1.1
f2: 1.1e-2 # 使用科学计数法
# 转为json样式如下
{"f1":1.1,"f2":0.011}null**、**Null**和**~**都是空,不指定值默认也是空**str6: null
str7: Null
str8: ~
str9:
# 转为json样式如下
{"str6":"","str7":"","str8":"","str9":""}java.util.Date**类型**# date1: 2020-05-26 这样写会抛异常
date1: 2020/05/26
date2: 2020/05/26 01:00:00
# 转为json样式如下
{"date1":1590422400000,"date3":1590426000000}
person:
name: 张三
age: 30
# Map格式方式一
map1:
k1: v1
k2: v2
# Map格式方式二
map2: { key1: value1, key2: value2 }
# 转为json样式如下
{"age":30,"map1":{"k1":"v1","k2":"v2"},"map2":{"key1":"value1","key2":"value2"},"name":"张三"}
person:
#数组格式一
subject:
- Java
- 前端
- 大数据
#数组格式二
likes: [王者荣耀,刺激战场]
# 转为json样式如下
{"likes":["王者荣耀","刺激战场"],"subject":["Java","前端","大数据"]}
person:
# 对象数组格式一
pet1:
- type: dog
age: 1
- type: cat
age: 2
# 对象数组格式一
pet2:
- type: dog
age: 1
-
type: cat
age: 2
# 对象数组格式一
pet3: [{type: dog, age: 1}, {type: cat, age: 2}]
# 转为json样式如下
{
"pet1":[{"age":1,"type":"dog"},{"age":2,"type":"cat"}],
"pet2":[{"age":1,"type":"dog"},{"age":2,"type":"cat"}],
"pet3":[{"age":1,"type":"dog"},{"age":2,"type":"cat"}]
}
person.name=李四
person.age=18
person.flag1=false
person.date1=2019/01/01
# map格式一
person.map1.key1=value1
person.map1.key2=value2
# map格式二
person.map2[k1]=v1
person.map2[k2]=v2
# 数组格式一
person.subject[0]=java
person.subject[1]=python
person.subject[2]=c++
# 数组格式二
person.likes=唱,跳,rap
# 数组对象格式
person.pet1[0].type=cat
person.pet1[0].age=1
person.pet1[1].type=dog
person.pet1[1].age=2
# 转为json样式如下
{
"age":18,
"date1":1546272000000,
"flag1":false,
"likes":["唱","跳","rap"],
"map1":{"key1":"value1","key2":"value2"},
"map2":{"k1":"v1","k2":"v2"},
"name":"李四",
"pet1":[{"age":1,"type":"cat"},{"age":2,"type":"dog"}],
"subject":["java","python","c++"]
}java –jar springboot.jar --server.port=80 --logging.level.root=debugProgram arguments(程序参数)**或**VM options (虚拟机参数)**就是添加临时属性的
JVM系统属性**,在**java -jar命令之间**使用(不常用,由JVM解析)应用程序选项或参数**,在**java -jar命令之后**使用(常用,由SpringBoot解析)# 以应用参数的方式
java -jar my.jar --server.port=7788
# 或以 JDK 参数的方式
java -Dserver.port=7788 -jar my.jar文件名**,注意仅仅是名称,不要带扩展名--spring.config.name=myApplication文件路径**或类路径,全路径名--spring.config.location=classpath:/myApplication.yml@Value**可以读取单个数据,属性名引用方式:**${一级属性名.二级属性名……}**@RestController
public class ReadConfigFile {
@Value("${server.port}")
private String myPort;
@RequestMapping("/getValue")
public String getValue(){
System.out.println(myPort);//8080
return "success";
}
}Environment**,使用**getProperty**方法获取@RestController
public class HelloController {
@Autowired
private Environment environment;
@GetMapping("/hello")
public String hello(){
String personName = environment.getProperty("person.name");
String petType = environment.getProperty("person.pet1[0].type");
return "Hello,Spring Boot !";
}
}@ConfigurationProperties**注解绑定配置信息到封装类中yml配置文件
person:
name: zhang3
age: 30
pets:
- type: dog
age: 1
- type: cat
age: 2
map:
k1: v1
k2: v2属性注入的实体,使用时候直接**@Autowired**注入即可
@Data
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private Integer age;
private List<Pets> pets;
private Map<String,String> map;
}
@Data
class Pets {
private String type;
private Integer age;
}<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>相同的前缀**center:
dataDir: /usr/local/fire/data
tmpDir: /usr/local/fire/tmp
logDir: /usr/local/fire/log
msgDir: /usr/local/fire/msgDir引用变量**baseDir: /usr/local/fire
center:
dataDir: ${baseDir}/data
tmpDir: ${baseDir}/tmp
logDir: ${baseDir}/log
msgDir: ${baseDir}/msgDirspringboot 2.4.0以前版本
spring:
profiles:
active: dev #激活dev环境配置
---
spring:
profiles: pro
server:
port: 80
---
spring:
profiles: dev
server:
port: 81
---
spring:
profiles: test
server:
port: 82springboot 2.4.0及以后的版本
spring.profiles**为过时属性配置,不过也能使用**spring.config.activate.on-profile**spring:
profiles:
active: dev #激活dev环境配置
---
spring:
config:
activate:
on-profile: pro
server:
port: 80
---
spring:
config:
activate:
on-profile: dev
server:
port: 81
---
spring:
config:
activate:
on-profile: test
server:
port: 82application.yml**主配置文件**spring:
profiles:
active: pro #激活pro环境
#其他公共属性
...application-pro.yml**生产环境配置文件**server:
port: 81application-dev.yml**开发环境配置文件**server:
port: 82后者优先级高**根据功能**对配置文件中的信息进行拆分,并制作成独立的配置文件,命名规则如下 SpringBoot2.4.0以前版本
spring:
profiles:
active: dev
include: devDB,devRedis,devMVC最后**加载,当主环境dev与其他环境有相同属性时,主环境属性生效
SpringBoot2.4.0及以后版本
group属性**替代**include属性**,降低了配置书写量spring:
profiles:
active: dev
group:
"dev": devDB,devRedis,devMVC
"pro": proDB,proRedis,proMVC
"test": testDB,testRedis,testMVC最先**加载,环境中有相同属性时,最后加载的环境属性生效