springboot配置文件以及引入外部资源

一: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”)

若使用以上注解,最好添加以下依赖,否则报红色
springboot配置文件以及引入外部资源

//导入配置文件处理器,配置文件进行绑定就会有提示,需要重启
<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

二:引入外部资源

  1. @PropertySource :加载指定的配置文件;
  2. @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读取不到配置问题。

上一篇:16.spring源码之@PropertySource注解


下一篇:spring中的@Value注解