springBoot读取配置文件

1.单个获取

1.1.通过Environment读取

配置文件

test:
  user:
    name: eden
    age: 18
    penName:
    email: 163.com
    fans: eat,sport,read

调用

    @Autowired
    Environment environment;
    @Test
    public void readByEnvironment(){
        System.out.println(environment.getProperty("test.user.email"));
    }

1.2.通过@value读取

配置文件

test:
  user:
    name: eden
    age: 18
    penName:
    email: 163.com
    fans: eat,sport,read

调用

    @Value("${test.user.name}") //读取配置文件
    private String name;
    @Value("${test.user.penName:大地瓜的豆}") //设置默认值,配置里读取不到就用默认值
    private String penName;
    @Value("${test.user.email:#{null}}") // 默认值设为null
    private String email;
    @Value("${test.user.fans}") //可用数组或集合接收配置里的数组类型
    private List<String> fans;
    @Test
    public void readByValues(){
        System.out.println("name:"+name);
        System.out.println("penName:"+penName);
        System.out.println("email:"+email);
        for (String fan : fans) {
            System.out.println("fan:"+fan);
        }
    }

2.全部获取

通过Environment和@Value 都是单个获取,如果要读取多个属性,可以用@ConfigurationProperties。
注意:
1.必须要有get,set
2.要结合@Component或 @Configuration表示交给spring容器处理,或者在启动类加上@EnableConfigurationProperties(GetConfiguration2.class)
3.从spring容器里的获取的对象才有属性值,不要自己new对象

bean

@Component
@ConfigurationProperties(prefix = "test.user")
@Data
public class GetConfiguration2 {
    private String name;
    private Integer age;
}

调用

    @Autowired
    GetConfiguration2 getConfiguration2;
    @Test
    public void readByConfigurationProperties(){
        System.out.println(getConfiguration2.getName()+"--"+getConfiguration2.getAge());
    }

3.指定文件获取

上面读取配置文件的方法(Environment、@Value、@ConfigurationProperties),会读取跟目录下所有的配置文件,如果存在同样的 key 值,最后一个处理的会覆盖前面的
最好指定要读取的配置文件@PropertySource("classpath:文件名")

4.@value扩展

    // 赋予默认值   
    @Value("chinese")  
    private String language;

     // 获取系统参数
    @Value("#{systemProperties['os.name']}")
    private String systemPropertiesName;

     // 表达式计算
    @Value("#{ T(java.lang.Math).random() * 100 }")
    private double randomNumber;

    // 获取其他bean的属性(其它bean定义见下面)
    @Value("#{otherBean.game}") 
    private String game;

    // 指定分隔符拆分
    @Value("#{'${test.user.fans}'.split('a')}")
    private List<String> numList;

    // 获取资源
    @Value("classpath:application.yml")
    private Resource resourceFile;

    // 获取连接
    @Value("http://www.choupangxia.com")
    private URL homePage;

    // #{}通过?:赋予默认值
    @Value("#{systemProperties['port']?:'8888'}")
    private String port;
@Service
public class OtherBean {
    @Value("部落冲突")
    private String game;

    public String getGame() {
        return game;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容