携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第24天,点击查看活动详情
配置文件格式
将端口号改为 80,
SpringBoot 提供了多种属性配置方式
-
application.propertiesserver.port=80 -
application.ymlserver: port: 81 -
application.yamlserver: port: 82
==注意:
SpringBoot程序的配置文件名必须是application,只是后缀名不同而已。==
三种配合文件的优先级
启动服务,在控制台可以看到使用的端口号是 80。说明 application.properties 的优先级最高
注释掉 application.properties 配置文件内容。再次启动服务,在控制台可以看到使用的端口号是 81,说明 application.yml 配置文件为第二优先级。
从上述的验证结果可以确定三种配置文件的优先级是:
==application.properties > application.yml > application.yaml==
==注意:==
SpringBoot核心配置文件名为application
SpringBoot内置属性过多,且所有属性集中在一起修改,在使用时,通过提示键+关键字修改属性例如要设置日志的级别时,可以在配置文件中书写
logging,就会提示出来。配置内容如下logging: level: root: info
yaml格式
YAML(YAML Ain't Markup Language),一种数据序列化格式。 优点:
-
容易阅读
yaml类型的配置文件比xml类型的配置文件更容易阅读,结构更加清晰 -
容易与脚本语言交互
-
以数据为核心,重数据轻格式
yaml更注重数据,而xml更注重格式
YAML 文件扩展名:
.yml(主流).yaml
上面两种后缀名都可以,以后使用更多的还是 yml 的。
语法规则
-
大小写敏感
-
属性层级关系使用多行描述,每行结尾使用冒号结束
-
使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
空格的个数并不重要,只要保证同层级的左侧对齐即可。
-
属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
-
表示注释
==核心规则:数据前面要加空格与冒号隔开==
读取配置数据
使用 @Value注解
使用 @Value("表达式") 注解可以从配合文件中读取数据,注解中用于读取属性名引用方式是:${一级属性名.二级属性名……}
我们可以在 BookController 中使用 @Value 注解读取配合文件数据,如下
@RestController
@RequestMapping("/books")
public class BookController {
@Value("${lesson}")
private String lesson;
@Value("${server.port}")
private Integer port;
@Value("${enterprise.subject[0]}")
private String subject_00;
@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println(lesson);
System.out.println(port);
System.out.println(subject_00);
return "hello , spring boot!";
}
}
在 resources 下创建一个名为 application.yml 的配置文件,里面配置了不同的数据,内容如下
lesson: SpringBoot
server:
port: 80
enterprise:
name: itcast
age: 16
tel: 4006184000
subject:
- Java
- 前端
- 大数据
Environment对象
上面方式读取到的数据特别零散,SpringBoot 还可以使用 @Autowired 注解注入 Environment 对象的方式读取数据。这种方式 SpringBoot 会将配置文件中所有的数据封装到 Environment 对象中,如果需要使用哪个数据只需要通过调用 Environment 对象的 getProperty(String name) 方法获取。具体代码如下:
@RestController
@RequestMapping("/books")
public class BookController {
@Autowired
private Environment env;
@GetMapping("/{id}")
public String getById(@PathVariable Integer id){
System.out.println(env.getProperty("lesson"));
System.out.println(env.getProperty("enterprise.name"));
System.out.println(env.getProperty("enterprise.subject[0]"));
return "hello , spring boot!";
}
}
自定义对象
SpringBoot 还提供了将配置文件中的数据封装到我们自定义的实体类对象中的方式。具体操作如下:
-
将实体类
bean的创建交给Spring管理。在类上添加
@Component注解 -
使用
@ConfigurationProperties注解表示加载配置文件在该注解中也可以使用
prefix属性指定只加载指定前缀的数据 -
在
BookController中进行注入