在Spring Boot中,配置文件是application.yml或者application.properties。
yml语法
yml配置文件的语法主要有以下几点:
key:[space] value
大小写敏感
空格(Tab)控制层级关系
其中value的可以是简单数据类型(数字、字符串),也可以是复杂数据类型(数组、对象、集合、Map等)。
注意:对于字符串,默认是不需要加双引号或者单引号。
配置文件注入
假设配置文件内容如下:
coder:
name: smartpig //简单数据
lang: [Java,Kotlin] //List
softwares: {cut: pr,image: ps} //Map
pet: //对象
name: bigdog
type: dog
使用@Value获取配置文件中的值
在控制器中,使用@Value(“${}”)获取配置文件中的值,如下获取了coder中name的值
@Controller
public class Hello {
@Value("${coder.name}")
private String name;
@RequestMapping("/hello")
@ResponseBody
public String hello(){
return "hello "+ name;
}
}
使用@ConfigurationProperties(perfix="")和@Compent与配置文件进行映射 编写Pet类,编写Coder类
@Component
@ConfigurationProperties(prefix = "coder")
public class Coder {
private String name;
private List<String> lang; //数组
private Map<String,String> softwares; //Map
private Pet pet; //对象
//省略getter/setter/toString
}
然后在测试类中进行测试
@SpringBootTest
class DemoSpringbootApplicationTests {
@Autowired
Coder coder;
@Test
void contextLoads() {
System.out.println(coder.toString());
}
}
输入结果为配置文件中的值
使用插件使得在yml中编写对应配置有提示效果
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
在properties配置文件中进行映射
如果使用properties配置文件,除了书写格式不同,其他操作都是和yml相同的。
coder.name=smartpig
coder.lang=Java,Kotlin
coder.softwares.cut=pr
coder.softwares.image=ps
coder.pet.name=bigdog
coder.pet.type=dog
@Value和@ConfigurationProperties的区别
EL表达式 将配置文件中的修改为如下
coder:
name: ${smartpig} //改为EL表达式
lang: [Java,Kotlin]
softwares: {cut: pr,image: ps}
pet:
name: bigdog
type: dog
使用@ConfigurationProperties时会报错:Could not resolve placeholder 'smartpig' in value "${smartpig}";使用@Value则不会报错
校验
在Coder类中增加校验,验证coder.name不为空串
@Component
@Validated
@ConfigurationProperties(prefix = "coder")
public class Coder {
@NotEmpty
private String name;
}
配置文件改为
coder:
name: //改为empty
lang: [Java,Kotlin]
softwares: {cut: pr,image: ps}
pet:
name: bigdog
type: dog
使用@ConfigurationProperties时会报错:
Property: coder.name
Value:
Origin: class path resource [application.yml]:2:8
Reason: 不能为空
使用@Value不会进行校验
复杂类型
使用@Value注入coder.name没有问题,如果使用@Value注入复杂类型,比如List
@Component
//@ConfigurationProperties(prefix = "coder")
public class Coder {
private String name;
@Value("${coder.lang}") //使用复杂类型注入lang
private List<String> lang;
private Map<String,String> softwares;
private Pet pet;
}
将会报错:Could not resolve placeholder 'coder.lang' in value "${coder.lang}"
最后:
上面都是自己整理好的!我就把资料贡献出来给有需要的人!顺便求一波关注,哈哈~各位小伙伴关注我后私信【Java】就可以免费领取哒
作者:天才猪不是猪
链接:https://juejin.im/post/5e55dc17e51d4527143e4a6e
网友评论