1.配置文件
spring boot使用一个全局配置文件,配置文件支持两种格式:
- application.properties
- application.yml
2. 基本用法
在application.yml定义属性:
server:
port: 8081
servlet:
context-path: /smallbear
注意:
- 使用.yml时,属性名的值和冒号中间必须有空格
- 字符串默认不加双引号。双引号表示不会转义里面的特殊字符,即特殊字符会作为本身所表示的意思。
测试:
@RestController
@RequestMapping("demo")
public class DemoController {
@GetMapping("index")
public String index() {
return "hello, world!";
}
}
启动工程,访问http://localhost:8081/smallbear/demo/index,浏览器显示
hello, world!
。
3. 自定义属性
在application.yml定义属性:
my:
name: joker
age: 14
在DemoController.java
中新增以下代码
// @Value可以通过${属性名}的方式读取application.yml文件的属性值
@Value("${my.name}")
private String name;
@Value("${my.age}")
private int age;
@GetMapping("getInfo")
public String getInfo() {
return "name: " + name + ", age: " + age;
}
启动工程,访问http://localhost:8081/smallbear/demo/getInfo,浏览器显示
name: joker, age: 14
。
4.将配置文件的属性赋给实体类
首先引入spring-boot-configuration-processor
的依赖包
org.springframework.boot
spring-boot-configuration-processor
true
在application.yml定义属性:
person:
name: mike
age: 18
adult: true
pets:
- cat
- dog
- alpaca
job:
name: teacher
salary: 8000
创建一个实体类:
/**
* 将配置文件中的每一个属性值,映射到这个组件中
* 注解@ConfigurationProperties:
* 告诉spring boot将本类中的所有属性和配置文件中的相关配置绑定
*/
@Component
@ConfigurationProperties(prefix = "person")
@Data
public class Person {
private String name;
private Integer age;
private Boolean adult;
private List pets;
private Job job;
}
@Data
public class Job {
private String name;
private BigDecimal salary;
}
在DemoController.java
中新增以下代码
@Autowired
private Person person;
@GetMapping("person")
public Person person() {
return person;
}
启动工程,访问http://localhost:8081/smallbear/demo/person,浏览器显示
{
"name": "mike",
"age": 18,
"adult": true,
"pets": [
"cat",
"dog",
"alpaca"
],
"job": {
"name": "teacher",
"salary": 8000
}
}
@ConfigurationProperties和@Value区别:
- @ConfigurationProperties支持批量注入配置文件的属性
- @Value支持SpEL表达式
5. 自定义配置文件
有时,我们不愿意把自定义配置写到application.yml中,这时需要我们自定义配置文件,例如,新建pet.properties
文件,置于resources目录下。
pet.name=泰迪
pet.age=6
pet.type=狗
创建一个实体类:
/**
* 注解@PropertySource:
* 指定properties文件的路径
* 不支持yml文件
*/
@Data
@Component
@PropertySource("classpath:pet.properties")
@ConfigurationProperties(prefix = "pet")
public class Pet {
private String name;
private Integer age;
private String type;
}
在DemoController.java
中新增以下代码
@Autowired
private Pet pet;
@GetMapping("pet")
public Pet pet() {
return pet;
}
启动工程,访问http://localhost:8081/smallbear/demo/pet,浏览器显示
{
"name": "泰迪",
"age": 6,
"type": "狗"
}
注意:
- @PropertySource不支持yml文件
- 读取properties文件出现中文乱码的同学,可以在IDEA的settings->Editor->file encodings中设置
default encoding for properties file
为utf-8
,并勾选transparent native-to-ascii conversion
。
6. 多环境配置文件
#选择激活的配置文件(yml可以使用代码块来表示一个配置文件)
#激活dev配置文件
spring:
profiles:
active: dev
---
#开发环境
spring:
profiles: dev
server:
port: 8081
---
#生产环境
spring:
profiles: prod
server:
port: 8082
---
#测试环境
spring:
profiles: test
server:
port: 8083