SpringBoot是约定大于配置的,所以很多配置都有默认值。如果想修改默认配置,可以用application.properties或application.yml(application.yaml)自定义配置。SpringBoot默认从Resource目录加载自定义配置文件。
1. properties文件
properties文件的配置多以key.key.key:value
的形式组成,那么springboot本身有默认的一些配置,如果要修改这些默认的配置,可以在application.properties中进行配置修改。
2. yaml或者yml文件
yaml文件等价于properties文件,在使用过程中都是一样的效果。但是yml文件书写的方式和properties文件不一样。更加简洁,那么我们可以根据需要选择性的使用properties和yml文件。如果同时存在两个文件,那么优先级properties要高于yml。
语法特点如下:
-
大小写敏感
-
数据值前必须有空格,作为分隔符
-
缩进的空格数目不重要,只需要对齐即可
-
#
表示注释
书写格式如下要求如下:key和key之间需要换行以及空格两次。 简单key value之间需要冒号加空格。
注意:yml语法中,相同缩进代表同一个级别
3. 获取配置文件中值
获取配置文件中的值我们一般有几种方式:
+ @value注解的方式 只能获取简单值
+ Environment的方式
+ @ConfigurationProperties
# 基本格式 key: value
name: zhangsan
# 数组 - 用于区分
city:
- beijing
- tianjin
- shanghai
- chongqing
#集合中的元素是对象形式
students:
- name: zhangsan
age: 18
score: 100
- name: lisi
age: 28
score: 88
- name: wangwu
age: 38
score: 90
#map集合形式
maps: {"name":"zhangsan", "age": "15"}
#参数引用
person:
name: ${name} # 该值可以获取到上边的name定义的值
age: 12
@RestController
public class Test2Controller {
@Value("${name}")
private String name;
@Value("${city[0]}")
private String city0;
@Value("${students[0].name}")
private String studentname;
@Value("${person.name}")
private String personName;
@Value("${maps.name}")//value注解只能获简单的值对象
private String name1;
@Autowired
private Environment environment;
@Autowired
private Student student;
@RequestMapping("/show")
public String showHello() {
System.out.println(name);
System.out.println(city0);
System.out.println(studentname);
System.out.println(personName);
System.out.println("environment name>>>>"+environment.getProperty("name"));
System.out.println(">>>>"+student.getAge());
return "hello world";
}
}
@Component
@ConfigurationProperties(prefix = "person")
public class Student {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
4. profile切换环境
在开发的过程中,需要配置不同的环境,所以即使我们在application.yml中配置了相关的配置项,但是在测试时,需要修改数据源等端口路径的配置,测试完成之后,又上生产环境,这时配置又需要修改,修改起来很麻烦。
---
#开发环境
server:
port: 8081
spring:
profiles:dev
---
#测试环境
server:
port: 8082
spring:
profiles:test
---
#生产环境
server:
port: 8083
spring:
profiles: pro
a.加入依赖:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
b.工程执行:clean package
c.jar包所有在目录执行 java -jar xxx.jar --spring.profiles.active=test