SpringBoot-配置

配置文件

经常把application.properties替换成application.yaml

语法区别:

application.properties
语法结构:key=value

application.yaml
语法结构:key:空格value

#普通值
name: lyr

#对象
user:
  name: lyr
  age: 18

#行内写法
student: {name: lyr,age: 18}

#数组
sex:
  - gril
  - boy

school: [student,teacher]

 

给属性赋值

使用yaml给属性赋值

Person实体类:

@component (把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>)

@ConfigurationProperties(prefix = "person")  告诉SpringBoot将本类中的属性和配置文件中相关的配置进行绑定

package com.lyr.pojo;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;
import java.util.Map;

@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String name;
    private int age;
    private Boolean money;
    private Date birth;
    private Map<String,Object> map;
    private List<Object> hobbies;
    private Dog dog;

    public Person() {
    }

    public Person(String name, int age, Boolean money, Date birth, Map<String, Object> map, List<Object> hobbies, Dog dog) {
        this.name = name;
        this.age = age;
        this.money = money;
        this.birth = birth;
        this.map = map;
        this.hobbies = hobbies;
        this.dog = dog;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Boolean getMoney() {
        return money;
    }

    public void setMoney(Boolean money) {
        this.money = money;
    }

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    public Map<String, Object> getMap() {
        return map;
    }

    public void setMap(Map<String, Object> map) {
        this.map = map;
    }

    public List<Object> getHobbies() {
        return hobbies;
    }

    public void setHobbies(List<Object> hobbies) {
        this.hobbies = hobbies;
    }

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }

    @Override
    public String toString() {
        return "person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", money=" + money +
                ", birth=" + birth +
                ", map=" + map +
                ", hobbies=" + hobbies +
                ", dog=" + dog +
                '}';
    }
}

在绑定配置@ConfigurationProperties注解时会爆红,这个意思是springboot中的注解没有配置,不过也不影响运行

不过在pom.xml中配置了下面的依赖就可以了,可以通过这个配置产生提示

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-configuration-processor</artifactId>
	<optional>true</optional>
</dependency>

Dog实体类:

package com.lyr.pojo;

import org.springframework.stereotype.Component;

@Component
public class Dog {
    private String name;
    private int age;

    public Dog() {
    }

    public Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

application.yaml:

person:
  name: lyr
  age: 18
  money: false
  birth: 2020/3/19
  map: {k1: v1,k2: v2}
  hobbies:
    - eat
    - sleep
  dog:
    name: 小黄
    age: 3

测试类:

package com.lyr;

import com.lyr.pojo.Person;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class SpringbootConfigApplicationTests {
    @Autowired
    private Person person;

    @Test
    void contextLoads() {
        System.out.println(person);
    }

}

结果:

使用properties给属性赋值

先修改编码格式Settings->FileEncodings,把编码格式修改为UTF-8

然后就可以在application.properties中配置了。

 

JSR303校验

可以通过注解进行数据的校验

使用:

在需要校验的属性上使用注解:下面代码中就要求age这个属性要是email格式的。

package com.lyr.pojo;

import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;

import javax.imageio.spi.ImageInputStreamSpi;
import javax.validation.constraints.Email;

@Component
@Validated  //校验数据
public class Dog {
    private String name;
    @Email
    //@Email(message="邮箱输入有误")
    private int age;

    public Dog() {
    }

    public Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

 

配置文件的位置

application.yaml或者application.properties的位置

优先级1:项目路径下的config文件夹配置文件

优先级2:项目路径下配置文件

优先级3:资源路径下的config文件夹配置文件

优先级4:资源路径下配置文件

多环境切换

用application.properties进行配置

  • application.properties 代表默认配置环境
  • application-test.properties 代表测试环境配置
  • application-dev.properties 代表开发环境配置

springboot默认是走application.properties的,要想切换在application.properties中激活环境:

spring.profiles.active=dev

用application.yaml进行配置

直接在一个yaml中完成,环境块之间用---分隔:

server:
  port: 8081

##选择要激活的环境
spring:
  profiles:
    active: dev

---
server:
  port: 8082

##声明配置环境的名称
spring:
  profiles: dev

---
server:
  port: 8083
spring:
  profiles: test
发布了322 篇原创文章 · 获赞 61 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/wan_ide/article/details/104965131