Python 官方文档:入门教程 => 点击学习
目录配置文件给实体注入值properties用法yaml用法通过配置文件给实体类注入属性上面yml中注意也可以使用properties注入配置文件值注入方式1.1 从全局配置文件中读
SpringBoot 默认的全局配置文件有两个 application.properties 和application.yml
# 例如修改端口号 直接赋值
server.port=8888
# 例如修改端口号
server:
port: 8888
// 实体类
@Component // 把实体类放入到spring容器中
@ConfigurationProperties(prefix = "student") // 识别配置文件
public class Student {
private String name;
private int age;
private boolean sex;
private Date birthday;
private Map<String, Object> location;
private String[] hobbies;
private List<String> skills;
private Pet pet;
// .... set/get/toString
}
# yml 配置文件
student:
name: zs
age: 23
sex: true
birthday: 2020/10/1
location: {province: 湖北,city: 武汉, zone: 洪山}
hobbies: [足球, 篮球]
skills: [编程, 金融]
pet:
nickName: wc
strain: hsq
在这里注意不同数据类型的写法,简单的数据直接赋值
# map类型和对象类型 的两种写法
# 1.行内写法
location: {province: 湖北,city: 武汉, zone: 洪山}
pet: {nickName: wc, strain: hsq}
# 2.分行写
location:
province: 湖北
city: 武汉
zone: 洪山
pet:
nickName: wc
strain: hsq
# 数组、list、set
# 1、行内写法, 其中中括号还可以省略
hobbies: [足球, 篮球]
skills: [编程, 金融]
# 2、分行写
hobbies:
- 足球
- 篮球
skills:
- 编程
- 金融
到 SpringBoot 测试文件中测试输出
@Autowired
Student student;
@Test
void contextLoads() {
System.out.println(student);
}
结果
Student{name='zs', age=23, sex=true, birthday=Thu Oct 01 00:00:00 CST 2020, location={province=湖北, city=武汉, zone=洪山}, hobbies=[足球,篮球], skills=[编程, 金融], pet=Pet{nickName='wc', strain='hsq'}}
# 如果对字符串加单引号,双引号会有什么区别
location: {province: "湖北",city: '武汉', zone: 洪山}
# 如果引号中只是字符串时没什么区别
location: {province: "湖\n北",city: '武\n汉', zone: 洪\n山}
# 此时双引号中的转义字符会被识别,会换行,单引号和不加引号会原样输出
student.name=ls
student.age=24
...
其中properties文件和yml文件中的值可以互相引用。两个配置文件可以互补,properties文件优先级高于yml
另外如果要注入的值不在这两个默认配置文件中,这是需要使用@PropertySource注解,遗憾的是该注解只支持properties文件,不支持yml文件
@PropertySource(value = {"classpath:conf.properties"})
public class Student {
...
配置文件 (application.yml)(写在application.properties也可以,格式变一下即可)
person:
lastName: Mary
age: 16
birthDate: 2004/01/01
maps: {one:1,two:2,three:3}
lists:
- 1
- 2
- 3
pet:
name: wanGCai
age: 3
实体类(javaBean):
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
private Date birthDate;
private Map<String,Object> maps;
private List<Object> lists;
private Pet pet;
//省略get,set方法
@Override
public String toString() {
String mapValue = "";
if(this.maps!=null){
for(String key:this.maps.keySet()){
Object value = this.maps.get(key);
mapValue += key+"\t"+value+"\t";
}
}
return "lastName:"+this.lastName+
"\nage:"+this.age+
"\nbirthDate:"+this.birthDate+
"\nmaps:"+mapValue+
"\nlists:"+this.lists+
this.pet;
}
}
public class Pet {
private String name;
private Integer age;
//省略get,set方法
@Override
public String toString() {
return "\nPet:\n\tPet name:"+this.name+
"\n\tPet age:"+this.age+"\n";
}
}
我们可以导入配置文件处理器,以后编写配置就有提示了(pom.xml)
<!--导入配置文件处理器,配置文件进行绑定就会有提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
测试
@SpringBootTest
class DemoApplicationTests {
@Autowired
Person person;
@Test
void contextLoads() {
System.out.println(person.toString());
}
}
@Value 其实是Spring中的注解,其功能使用xml文件描述是这样的:
<bean class="Person">
<property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#{SpEL}"></property>
<bean/>
其中property表示的是Person类中的各项属性,name用于指定具体属性,value用于指定值。
value的值主要有3种:
@Component
public class Person {
@Value("${person.last-name}") //@Value("#{'Lily'.toUpperCase()}")
private String lastName;
@Value("#{11*2}")
private Integer age;
private Date birthDate;
private Map<String,Object> maps;
private List<Object> lists;
private Pet pet;
//省略get,set和toString
}
在 resources 目录下创建 person.properties
person.lastName = Lily
person.age = 20
person.birthDate = 2000/01/01
person.maps.one = 1
person.maps.two = 2
person.lists = a,b,ch
person.pet.name = wangcai
person.pet.age = 3
更改 Person 类中的注解
@Component
@PropertySource(value = {"classpath:person.properties"})
@ConfigurationProperties(prefix = "person")
public class Person {
//...省略属性,get,set,toString
}
要注意的是,PropertySource 只支持properties文件,不支持yml文件读取。
创建配置文件
更改注释
@Component
@PropertySource(value = {"classpath:person.properties"})
public class Person {
@Value("${person.last-name}")
private String lastName;
//...省略属性,get,set,toString
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
--结束END--
本文标题: SpringBoot 配置文件给实体注入值方式
本文链接: https://www.lsjlt.com/news/139568.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0