Springboot获取配置文件中值的方法

目前知道的获取配置文件中的值的注解有2个@ConfigurationProperties和@Value

@ConfigurationProperties

出自springboot

主要用在类上边
可以用来获取配置文件中集合的值

可以配合@Configuration来实现读取配置文件参数并在项目启动过程中加载进Bean实例中。如当使用Springboot+shiro时,shiro框架有一些Bean是在项目启动时实例化的,且带有可配置的参数,这时候就可使用上边的方法实现即创建Bean实例又注入配置文件的配置参数。

@Configuration出自spring,具体用法可以在网上找找。

@Value

出自spring

主要用在属性上边
不可以用来获取配置文件中集合的值

二则都必须使用在Bean的实例中,就是2个注解必须放在被@Controller,@Service,@Component等注解的类里边。普通类使用这2个注解是无法获取到值的

案例

创建一个application.yaml,内容如下:
my:
   servers:
       - dev.bar.com
       - foo.bar.com
   port: 8080
   name: lilei
name: hanmeimei
创建一个Protest.java的类用来封装配置文件的参数
package com.example.springboot.common;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "my")
public class Protest {
	//因为配置文件中有2个名字为name的配置,此处的name就是my.name,值为lilei
	//如果此处加上@Value("${name}")会被忽略,优先使用的还是my.name的值
	private String name;
	
	private String port;
	
	private List<String> servers = new ArrayList<String>();
	
	//因为配置文件中有2个名字为name的配置,此处的name会获取配置文件中的第二个name,值为hanmeimei
	@Value("${name}")
	private String otherName;
	
	//因为@ConfigurationProperties使用了(prefix = "my")所以当不使用@Value("${env}")是获取不了配置文件env的值的
	@Value("${env}")
	private String env;
	
	public Protest() {
		//此处可在项目启动过程中打印在控制台
		System.out.println("开始构造Protest的实例");
	}

	public String getName() {
		System.out.println("正在获取name的值");
		return name;
	}

	public void setName(String name) {
		System.out.println("正在设置name的值");
		this.name = name;
	}

	public String getPort() {
		return port;
	}

	public void setPort(String port) {
		this.port = port;
	}

	public List<String> getServers() {
		return servers;
	}

	public void setServers(List<String> servers) {
		this.servers = servers;
	}

	public String getOtherName() {
		return otherName;
	}

	public void setOtherName(String otherName) {
		this.otherName = otherName;
	}

	public String getEnv() {
		return env;
	}

	public void setEnv(String env) {
		this.env = env;
	}
	
}
创建一个Controller来测试下,看看输出结果:
package com.example.springboot.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.example.springboot.common.Protest;

@RestController
public class HelloController {
	
	@Autowired
	private Protest pt;

	@RequestMapping("/")
	public String helloTest() {
		System.out.println(pt.getName());
		System.out.println(pt.getPort());
		System.out.println(pt.getServers().size());
		System.out.println(pt.getOtherName());
		System.out.println(pt.getEnv());
		return "hello world";
	}
}
最终控制台输出:
lilei
8080
2
hanmeimei
test


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅气的梧桐述

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值