当前位置:   article > 正文

Springboot获取配置文件中值的方法_active: ${env.name} 从哪里拿值

active: ${env.name} 从哪里拿值

目前知道的获取配置文件中的值的注解有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的类用来封装配置文件的参数
  1. package com.example.springboot.common;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import org.springframework.beans.factory.annotation.Value;
  5. import org.springframework.boot.context.properties.ConfigurationProperties;
  6. import org.springframework.stereotype.Component;
  7. @Component
  8. @ConfigurationProperties(prefix = "my")
  9. public class Protest {
  10. //因为配置文件中有2个名字为name的配置,此处的name就是my.name,值为lilei
  11. //如果此处加上@Value("${name}")会被忽略,优先使用的还是my.name的值
  12. private String name;
  13. private String port;
  14. private List<String> servers = new ArrayList<String>();
  15. //因为配置文件中有2个名字为name的配置,此处的name会获取配置文件中的第二个name,值为hanmeimei
  16. @Value("${name}")
  17. private String otherName;
  18. //因为@ConfigurationProperties使用了(prefix = "my")所以当不使用@Value("${env}")是获取不了配置文件env的值的
  19. @Value("${env}")
  20. private String env;
  21. public Protest() {
  22. //此处可在项目启动过程中打印在控制台
  23. System.out.println("开始构造Protest的实例");
  24. }
  25. public String getName() {
  26. System.out.println("正在获取name的值");
  27. return name;
  28. }
  29. public void setName(String name) {
  30. System.out.println("正在设置name的值");
  31. this.name = name;
  32. }
  33. public String getPort() {
  34. return port;
  35. }
  36. public void setPort(String port) {
  37. this.port = port;
  38. }
  39. public List<String> getServers() {
  40. return servers;
  41. }
  42. public void setServers(List<String> servers) {
  43. this.servers = servers;
  44. }
  45. public String getOtherName() {
  46. return otherName;
  47. }
  48. public void setOtherName(String otherName) {
  49. this.otherName = otherName;
  50. }
  51. public String getEnv() {
  52. return env;
  53. }
  54. public void setEnv(String env) {
  55. this.env = env;
  56. }
  57. }
创建一个Controller来测试下,看看输出结果:
  1. package com.example.springboot.controller;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. import org.springframework.web.bind.annotation.RestController;
  5. import com.example.springboot.common.Protest;
  6. @RestController
  7. public class HelloController {
  8. @Autowired
  9. private Protest pt;
  10. @RequestMapping("/")
  11. public String helloTest() {
  12. System.out.println(pt.getName());
  13. System.out.println(pt.getPort());
  14. System.out.println(pt.getServers().size());
  15. System.out.println(pt.getOtherName());
  16. System.out.println(pt.getEnv());
  17. return "hello world";
  18. }
  19. }
最终控制台输出:
lilei
8080
2
hanmeimei
test


本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/939281
推荐阅读
相关标签
  

闽ICP备14008679号