Spring Boot读取properties配置文件的两种方式:
1、@value:一般用于单个属性值时,直接通过这种方式进行注入
2、@ConfigurationProperties:一般用于前缀下含有多个属性值时,一般使用这种方式进行注入
在配置文件中进行对应的配置
server.port=8083
cmjConfig.name=miaomao
package com.cmj;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@Value("${cmjConfig.name}")
private String name;
@RequestMapping("/hello")
public String hello() {
return "hello Spring Boot"+name;
}
}
可以直接通过@Value("${cmjConfig.name}") 直接获取到对应的name值,不需要再去创建一个实体类
这边是通过注解,从application.properties中获取到cmjConfig.name的值
当我们在项目中,出现@value下的属性值未配置时:
当我们在使用@value(”${xxxx}”)时,这个XXXX的值我们并没有设置,可能我们直接运行时会报对应的错误;这个时候,我们可以使用一种方式,对于未设置的属性值内容给一个默认值,通过“:对应的内容”进行
格式:@value("${name2:XXXXX}")
当name2这个值没有配置时,则会自动被生成默认的值:“XXXX”
在实际项目中,当项目需要注入的变量值很多时,@value的方法工作量会变得比较大,这时候我们通常使用基于类型安全的配置方式,将properties属性和一个Bean关联在一起,即使用注解@ConfigurationProperties读取配置文件数据。
server.port=8083
person.name=xiaoming
person.age=55
person,.address=wudalu
package com.cmj.springBootTEST;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private int age;
private String address;
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 String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Person(String name, int age, String address) {
super();
this.name = name;
this.age = age;
this.address = address;
}
public Person() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", address=" + address + "]";
}
}
@Component 表示将该类标识为Bean
@ConfigurationProperties(prefix = "person")用于绑定属性,其中prefix表示所绑定的属性的前缀。
将这个前缀下面的对应属性值,直接注入至实体类的属性值中
如果未写前缀,在配置文件中出现多个name时,他可能就无法识别是person下面的name值,所以需要有这个前缀进行区分
这边通过@ConfigurationProperties(prefix = "person")注释完之后,就不需要像@value一样一个个配置过去,他会自动将配置文件中的对应属性值直接一一对应上去
使用时,先使用@Autowired自动装载Person,然后再进行取值,示例如下:
package com.cmj.springBootTEST.WEB;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.cmj.springBootTEST.CmjConfig;
import com.cmj.springBootTEST.Person;
@RestController
@RequestMapping("hello2")
public class OneController {
@Autowired
private Person person;
@RequestMapping("")
public String hello() {
System.out.println(person);
System.out.println("e43333");
}
}