Spring Boot读取properties配置文件的两种方式

 Spring Boot读取properties配置文件的两种方式:

1、@value:一般用于单个属性值时,直接通过这种方式进行注入

2、@ConfigurationProperties:一般用于前缀下含有多个属性值时,一般使用这种方式进行注入

1、使用@Value注解读取对应数据内容

在配置文件中进行对应的配置

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”

2、使用@ConfigurationProperties注解读取

在实际项目中,当项目需要注入的变量值很多时,@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");
		
     }
}

你可能感兴趣的:(SpringBoot,spring,boot,java,后端)