SpringBoot如何将属性写在配置文件中

SpringBoot中如何动态给属性赋值

非动态赋值的缺点

@RestController  //保证返回的数据转化为JSON
public class JDBCController {
          
   
	
	private String username;	//定义数据库用户名
	private String password;	//定义数据库密码
	
	@RequestMapping("/getMsg")
	public String getMsg() {
          
   
		
		this.username = "root";
		this.password = "root";
		return username+"|"+password;
	}
}

上面这种方式将配置信息,通过代码的形式写死到代码中,这样的话程序的耦合性高,不便扩展

动态赋值

# yml 文件
jdbc:
 username: root
 password: root

可以在yml配置文件中书写配置信息,然后通过spel表达式来动态赋值,注意这时候的JDBC只是一个前缀

@RestController //保证返回的数据转化为JSON
public class JDBCController {
          
   
  
  //1.需求:利用YML配置文件的信息为属性赋值
  //@Value作用: 从spring容器中找到具体的key,为属性赋值.
  @Value("${jdbc.username}") //spel表达式 spring提供
  private String username;	//定义数据库用户名
  
  @Value("${jdbc.password}")
  private String password;	//定义数据库密码
  
  @RequestMapping("/getMsg")
  public String getMsg() {
          
   
  	
  	this.username = "root";
  	this.password = "root";
  	return username+"|"+password;
  }
  
  @RequestMapping("/getMsgValue")
  public String getMsgValue() {
          
   
  	
  	return username+"|"+password;
  }	
}

但是有时某些配置可能需要很多的属性信息.如果这时利用@Value的方式赋值.则必然导致代码冗余.可读性差.这时就需要对动态赋值进行批量操作

批量动态赋值

1.引入依赖

<!--添加属性注入-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>

2.通过@ConfigurationProperties注解引入

@RestController
@ConfigurationProperties(prefix = "jdbc")  //定义属性的前缀
public class JDBCController2 {
          
   

	//批量为属性赋值时,要求配置文件的属性与类中的属性名称必须一致. 自动的赋值.
	private String username;	//定义数据库用户名
	private String password;	//定义数据库密码
	
	//为属性赋值时,一定会调用对象的set方法.
	
	@RequestMapping("/getMsgPrefix")
	public String getMsgValue() {
          
   
		
		return username+"|"+password;
	}
	
	
	

	public String getUsername() {
          
   
		return username;
	}

	public void setUsername(String username) {
          
   
		this.username = username;
	}

	public String getPassword() {
          
   
		return password;
	}

	public void setPassword(String password) {
          
   
		this.password = password;
	}
	
}

这样只要属性名相同就可以实现自动批量动态赋值

经验分享 程序员 微信小程序 职场和发展