本文介绍: SpringBoot从配置文件中获取属性
方式一:@Value
基本类型属性注入,直接在字段上添加@Value("${xxx.xxx}")
即可.注意这里用的是$,而不是#,@Value
注入的属性,一般其他属性没有关联关系。
配置文件
user:
name: Manaphy
age: 19
sex: male
@RestController
public class ConfigPropertiesController {
@Value("${user.name}")
private String name;
@Value("${user.age}")
private Integer age;
@Value("${user.sex}")
private String sex;
@GetMapping("/user")
public String getUser() {
return "{name:" + name + ",age:" + age + ",sex:" + sex + "}";
}
}
方式二:@ConfigurationProperties
配置文件
person:
lastName: hello
age: 18
boss: false
birth: 2017/12/12
maps: {k1: v1,k2: v2}
lists:
- lisi
- wangwu
dog:
name: 小狗
age: 12
JavaBean
/**
* 将配置文件中配置的每一个属性的值,映射到这个组件中
* @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
* prefix = "person":配置文件中哪个下面的所有属性进行一一映射
* 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能
*/
@Component
@ConfigurationProperties(prefix = "person")
@Data
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String, Object> maps;
private List<Object> lists;
private Dog dog;
}
@Data
class Dog {
private String name;
private Integer age;
}
Controller层
@RestController
public class PersonController {
@Autowired
private Person person;
@GetMapping("/person")
public Person getPerson() {
return person;
}
}
运行结果如下
我们可以导入配置文件处理器,以后编写配置就有提示了
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
注意:使用@ConfigurationProperties注入属性时如果只给属性提供get方法,会报错
例
/**
* yml配置
*/
sms:
region-id: cn-shanghai
access-key-id: 123
access-key-secret: 123
sign-name: 叮咚买菜
/**
* 实体类
*/
@Getter
@Component
@ConfigurationProperties(prefix = "sms")
public class SmsProperties {
private String regionId;
private String accessKeyId;
private String accessKeySecret;
}
/*
报错
Description:
Failed to bind properties under 'sms' to com.example.producer.producerdemo.util.SmsProperties:
Property: sms.access-key-id
Value: 123
Origin: class path resource [application.yml] - 51:18
Reason: java.lang.IllegalStateException: No setter found for property: access-key-id
Action:
Update your application's configuration
*/
@Value和@ConfigurationProperties比较
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
配置文件yml还是properties他们都能获取到值;
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;
如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties。
原文地址:https://blog.csdn.net/Cafune_f/article/details/135397092
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_52794.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。