SpringBoot全局配置文件

SpringBoot使用一个application.properties或者application.yaml的文件作为全局配置文件。

application.properties配置文件

application.properties文件中定义springboot项目的相关属性

注入系统变量,系统属性等
server.address=80
server.port=8080
server.datasource.driver-class-name=com.mysql.jdbc.Driver
@ConfigurationProperties注入自定义属性
# Pet类
     public class Pet {
         private String type;
         private String name;
         //属性getXX()和setXX()方法
         //toString()方法
     }
# Person类
     @Component    //用于将Person类作为Bean注入到Spring容器中
     @ConfigurationProperties(prefix = "person") //将配置文件中以person开头的属性注入到该类中
     public class Person {
         private int id;            //id
         private String name;      //名称
         private List hobby;       //爱好
         private String[] family; //家庭成员
         private Map map;
         private Pet pet;          //宠物
         //属性getXX()和setXX()方法
         //toString()方法
     }

在Person类中的

  • @Component注解用于将Person类作为Bean注入到Spring容器中,只有这样才能通过@ConfigurationProperties注解赋值
  • @ConfigurationProperties(prefix = "person")注解是将配置文件(applications.properties)中以person开头的属性值通过setter方法注入到实体类中。

在application.properties文件中添加

     #对实体类对象Person进行属性配置
     person.id=1
     person.name=tom
     person.hobby=play,read,sleep
     person.family=father,mother
     person.map.k1=v1
     person.map.k2=v2
     person.pet.type=dog
     person.pet.name=kity

以上配置是对Person类的相关属性进行配置,这些配置会通过@ConfigurationProperties(prefix = "person")注解注入到bean(Person对象)的对应属性中(通过setxx()方法)。

@Value注入属性
@Component
public class Person {
@Value("${person.id}")
    private int id;      
}
  • @Component注解用于将Person类作为Bean注入到Spring容器中
  • @Value注解不仅可以将配置文件的属性注入Person的id属性,还可以直接给id属性赋值,可以免去setxx()方法,使用此方法仅支持对普通类型属性赋值。
对比
对比点 @ConfigurationProperties @Value
底层框架 Spring Boot Spring
功能 批量注入配置文件中的属性 单个注入
属性setXX()方法 需要 不需要
复杂类型属性注入 支持 不支持
松散绑定 支持 不支持
JSR303数据校验 支持 不支持
SpEL表达式 不支持 支持

application.yaml配置文件

YAML文件格式是Spring Boot支持的一种JSON超集文件格式,相较于传统的Properties配置文件,YAML文件以数据为核心,是一种更为直观且容易被电脑识别的数据序列化格式。

  • 普通数据类型
server:
  port: 8080
  path: /hello
  • 数组等集合类型
# 缩进式写法
person:
  hobby:
    - play
    - read
    - sleep
# 行内式写法
person:
  hobby: [play,read,sleep]
  • map集合和对象
person:
  map:
    k1: v1
    k2: v2
person:
  map: {k1: v1, k2 :v2}

示例

     #对实体类对象Person进行属性配置
     person:
       id: 2
       name: 张三
       hobby: [sing,read,sleep]
       family: [father,mother]
       map: {k1: v1,k2: v2}
       pet: {type: cat, name: tom}

以上配置属性会通过@ConfigurationProperties(prefix = "person")注解注入到Person实体类的对应属性中。

posted @ 2024-12-10 21:48  天空之城com  阅读(4)  评论(0编辑  收藏  举报