配置文件
经常把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