一:springboot配置文件
SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的
application.properties
- 语法结构 :key=value
application.yml
- 语法结构 :key:空格 value
配置文件的作用 :
修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了;
比如我们可以在配置文件中修改Tomcat 默认启动的端口号!测试一下!
server.port=8081
1:yaml基础语法
说明:语法要求严格!
1、空格不能省略
2、以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。
3、属性和值的大小写都是十分敏感的。
yaml例子
@ConfigurationProperties(prefix = “person”)
若使用以上注解,最好添加以下依赖,否则报红色
//导入配置文件处理器,配置文件进行绑定就会有提示,需要重启
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
实体类
/*
@ConfigurationProperties作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应
注意:如果属性不对应会赋值null
*/
@Component //注册bean
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private Integer age;
private Boolean happy;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
}
配置文件注入
person:
name: 小小
age: 3
happy: false
birth: 2000/01/01
maps: {k1: v1,k2: v2}
lists:
- code
- girl
- music
dog:
name: 旺财
age: 1
2:配置文件占位符
person:
name: qin${random.uuid} # 随机uuid
age: ${random.int} # 随机int
happy: false
birth: 2008/01/01
maps: {k1: v1,k2: v2}
lists:
- code
- girl
- music
dog:
name: ${person.hello:other}_旺财
age: 1
birth: ${person.birth}_0001
二:引入外部资源
- @PropertySource :加载指定的配置文件;
- @configurationProperties:默认从全局配置文件中获取值;
测试
1、我们去在resources目录下新建一个person.properties文件
name=shen
2、然后在我们的代码中指定加载person.properties文件
//@PropertySource(value = "classpath:person.properties")
@PropertySource(value = "file:/app/tomcat/conf/person.properties")
//@PropertySource(value = {"test.properties","file:/etc/test.properties",},ignoreResourceNotFound = true)
@Component //注册bean
public class Person {
@Value("${name}")
private String name;
......
}
总结:
1:@PropertySource注解引入外部配置文件,
2:比如数据库配置jdbc,环境分离,只需要javaBean与映射的属性配置在外部位置即可。通过注解指定数据源位置。其他的还放在classpath下,
3:比如docker部署war包,yml放resources下,里边的配置信息url可以单独配置外部路径,不影响程序其他不变的配置。
4:解决yml放外部后springboot读取不到配置问题。