Spring Boot配置文件注入
2020/2/26 17:16:25
本文主要是介绍Spring Boot配置文件注入,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在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的区别
序号 | @Value | @ConfigurationProperties |
---|---|---|
1 | 单个注入 | 批量注入 |
2 | 支持EL表达式 | 不支持EL表达式 |
3 | 不支持校验 | 支持校验 |
4 | 不支持自动转换为驼峰命名 | 支持自动转为驼峰命名 |
5 | 不支持复杂类型注入 | 支持复杂类型注入 |
-
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}"
总结
今天和大家分享了配置文件数据如何注入到变量或者类中;对于少量数据可以使用@Value,但是如果数据比较复杂时可以使用@ConfigurationProperties。
感谢观看~
这篇关于Spring Boot配置文件注入的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27JavaScript面试真题详解与解答
- 2024-12-27掌握JavaScript大厂面试真题:新手入门指南
- 2024-12-27JavaScript 大厂面试真题详解与解析
- 2024-12-26网络攻防资料入门教程
- 2024-12-26SQL注入资料详解:入门必读教程
- 2024-12-26初学者指南:数据库服务漏洞项目实战
- 2024-12-26网络安全项目实战:新手入门指南
- 2024-12-26网络攻防项目实战入门教程
- 2024-12-26信息安全项目实战:从入门到初步应用
- 2024-12-26SQL注入项目实战:初学者指南