码迷,mamicode.com
首页 > 其他好文 > 详细

SringBoot配置

时间:2021-05-24 01:56:49      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:not   sse   端口   config   比较   etl   文件名   优先级   lis   

SringBoot配置

springboot所有配置

1、配置文件

spring boot使用一个全局的配置文件,配置文件名称是固定的。配置文件的作用就是修改spring boot自动配置的默认值,因为在底层所有配置都是配置好的,这个文件只是用来修改。

application.properties

  • 语法结构:key=value

    # 更改项目的端口号
    server.port=8081
    

application.yaml

  • 官方推荐使用

  • 语法结构:key:空格value

    # 更改项目的端口号
    server:
      port: 8081
      
      
    # 可以存对象
    student:
      name: jim
      age: 25
    # 行内写法
    student: {name: jim, age: 25}
    
    # 数组
    pets:
      - cat
      - dog
      - pig
    # 行内写法
    pets: [cat, pig, dog]
    
  • yaml支持给实体类赋值

  • 文件中还可以使用SPEL表达式

  • yaml是松散绑定,例如key值为first-name,实体类属性名为firstName,依旧可以绑定上

  • yaml支持JSR303校验

  • yaml给实体类赋值

    • @ConfigurationProperties(prefix = "xxx")

      @Component
      @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<String> lists;
          private Dog dog;
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public Integer getAge() {
              return age;
          }
      
          public void setAge(Integer age) {
              this.age = age;
          }
      
          public boolean isHappy() {
              return happy;
          }
      
          public void setHappy(boolean happy) {
              this.happy = happy;
          }
      
          public Date getBirth() {
              return birth;
          }
      
          public void setBirth(Date birth) {
              this.birth = birth;
          }
      
          public Map<String, Object> getMaps() {
              return maps;
          }
      
          public void setMaps(Map<String, Object> maps) {
              this.maps = maps;
          }
      
          public List<String> getLists() {
              return lists;
          }
      
          public void setLists(List<String> lists) {
              this.lists = lists;
          }
      
          public Dog getDog() {
              return dog;
          }
      
          public void setDog(Dog dog) {
              this.dog = dog;
          }
      
          @Override
          public String toString() {
              return "Person{" +
                      "name=‘" + name + ‘\‘‘ +
                      ", age=" + age +
                      ", happy=" + happy +
                      ", birth=" + birth +
                      ", maps=" + maps +
                      ", lists=" + lists +
                      ", dog=" + dog +
                      ‘}‘;
          }
      }
      
      public class Dog {
      
          private String name;
          private Integer age;
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public Integer getAge() {
              return age;
          }
      
          public void setAge(Integer age) {
              this.age = age;
          }
      
          @Override
          public String toString() {
              return "Dog{" +
                      "name=‘" + name + ‘\‘‘ +
                      ", age=" + age +
                      ‘}‘;
          }
      }
      

      application.yaml

      person:
        name: jim
        age: 25
        happy: false
        birth: 2020/01/01
        maps: {k1: v1, k2: v2}
        lists: [v1, v2, v3]
        dog:
          name: wangcai
          age: 3
      

      结果:

      Person{name=‘jim‘, age=25, happy=false, birth=Wed Jan 01 00:00:00 CST 2020, maps={k1=v1, k2=v2}, lists=[v1, v2, v3], dog=Dog{name=‘wangcai‘, age=3}}
      
    • properties文件其实也可以给实体类赋值,就是比较麻烦

      • 先写一个配置文件person.properties

        name=jim
        age=25
        
      • 实体类使用@PropertySource(value="classpath:person.properties:")注解,在使用SPEL表达式注入属性值。

        @Component
        @PropertySource(value="classpath:person.properties:")
        public class Person {
        
            @Value("${name}")
            private  String name;
            @Value("${age}")
            private Integer age;
        
            public String getName() {
                return name;
            }
        
            public void setName(String name) {
                this.name = name;
            }
        
            public Integer getAge() {
                return age;
            }
        }
        
  • JSR303校验

    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    import org.springframework.validation.annotation.Validated;
    
    import javax.validation.constraints.NotBlank;
    
    @Component
    @ConfigurationProperties(prefix = "person")
    @Validated //数据校验
    public class Person {
    
        @NotBlank // name不能为空
        private  String name;
        
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    
    • 如果@NotBlank引不到,可以尝试添加pom

      <!-- JSR303校验 -->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-validation</artifactId>
      </dependency>
      
    • 一些常见规则

      @NotNUll(message="值不能为空")
      @Max(value=100, message="最大值不能超过100")
      @Email
      
      空检查:
      @Null      验证对象是否为null
      @NotNull   验证对象是否不为null
      @NotBlank  检查字符串是否不为null,trim后的长度是否大于0
      @NotEmpty  检查元素是否不为null或者不为Empty
      
      boolean检查:
      @AssertTrue   验证值是否为true
      @AssertFalse  验证值是否为false
          
      长度检查:
      @Size(min= , max= )    验证对象(Array,Collenction,Mao,String)长度是否在给定的范围内
      @Length(min= , max= )  验证字符串是否在长度范围内
          
      日期检查:    
      @Past    验证 Date 和 Calendar 对象是否在当前时间之前
      @Future  验证 Date 和 Calendar 对象是否在当前时间之后
          
      @Pattern 验证String对象是否符合正则表达式的规则
      ...
      

2、配置文件位置

按优先级从上到下:

  • file:./config/
  • file:./
  • classpath:/config/
  • classpath:/

技术图片

多环境配置

实际工作中我们可能会有开发环境一个配置文件、测试环境一个配置文件、生产环境一个配置文件的情况。spring boot中可以根据一个spring.profiles.active的配置,进行配置文件间的切换。

  • properties配置文件

技术图片

  • yaml配置文件

技术图片

SringBoot配置

标签:not   sse   端口   config   比较   etl   文件名   优先级   lis   

原文地址:https://www.cnblogs.com/jinshengnianhua/p/14745298.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!