标签:not sse 端口 config 比较 etl 文件名 优先级 lis
spring boot使用一个全局的配置文件,配置文件名称是固定的。配置文件的作用就是修改spring boot自动配置的默认值,因为在底层所有配置都是配置好的,这个文件只是用来修改。
语法结构:key=value
# 更改项目的端口号
server.port=8081
官方推荐使用
语法结构: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对象是否符合正则表达式的规则
...
按优先级从上到下:

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


标签:not sse 端口 config 比较 etl 文件名 优先级 lis
原文地址:https://www.cnblogs.com/jinshengnianhua/p/14745298.html