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

来源:互联网 发布:淘宝拍卖车交多少税 编辑:程序博客网 时间:2024/05/21 09:53

目前知道的获取配置文件中的值的注解有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: lileiname: 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;@RestControllerpublic class HelloController {@Autowiredprivate 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


原创粉丝点击