SpringBoot读取配置文件的方式

SpringBoot读取配置文件的方式

方式1:@Value

这种方式最简单易用,但是无法表示层级关系的配置,读取的配置来自application.properties(yml),使用示例:

application.yml
foo:
  bar: mark
使用配置的类

在要读取配置的类中定义如下属性就可以使用配置

...
@Value("${foo.bar}")
private String foobar;
...

方式2:@ConfigurationProperties

该种读取配置文件的方式更强大,能够表示层级配置,将配置文件中某一前缀开头的配置映射成一个JavaBean,读取的配置来自application.properties(yml),使用示例:

application.yml
user:
  name: Lucy
  age: 20
配置类

@Data是lombok注解,主要是用它生成getter/setter方法,这是必须的,否则Spring帮不了你

@Data
@ConfigurationProperties(prefix = "user")
public class User {

    private String name;
    private Integer age;

}
SpringBoot入口类

通过该种方式配置的Bean都需要在入口类中开启,如下:

...

@SpringBootApplication  
@EnableConfigurationProperties({User.class})  
public class DemoApplication {  
    ...
}
使用配置的类

在需要该配置的类中自动注入配置Bean即可

...
@Autowired
private User user;
...

方式3:@PropertySource

这种方式读取配置文件的优先级是最低的,也就是说如果有同名的配置存在就会被覆盖,该种方式与@Value有些类似,唯一的区别就是读取来源,读取的配置来自自定义文件,使用示例:

配置类
@Data
@Component
@PropertySource("classpath:car.properties")
public class Car {

    @Value("${name}")
    private String name;

    @Value("${price}")
    private Double price;

}
自定义配置文件(car.properties)
name=Audi A4
price=450000.12

方式4:@ConfigurationProperties与@PropertySource结合

有一种最常用的场景:配置文件名是自定义的,通过不同的前缀来区分不同的配置,那就需要方式1和方式3组合使用,读取的配置来自自定义文件,使用示例:

自定义配置文件(car.properties)
name=Audi A4
price=450000.12

audi.name=Audi A6
audi.price=680000.99
配置类
@Data
@PropertySource("classpath:car.properties")
@ConfigurationProperties(prefix = "audi")
public class Audi {

    @Value("${name}")
    private String name;

    @Value("${price}")
    private Double price;

}
SpringBoot入口类
...
@SpringBootApplication
@EnableConfigurationProperties({Audi.class})
public class Application {
    ...
}

posted on 2017-10-20 16:44  IceWee  阅读(584)  评论(0编辑  收藏  举报

导航