SpringBoot读取配置文件

77 阅读2分钟

获取Spring默认的全局配置文件

方式一:

使用@Value注解实现

application.yml配置文件

server:
  port: 8081

person:
  name: "李四"
  age: 18
  message: 666

使用实例:

@RestController
@Slf4j
public class TestController {
    @Value("${person.name}")
    private String name;

    @Value("${person.age}")
    private Integer age;

    @Value("${person.message}")
    private String message;


}

注意:

  • 此方式有不足之处就是@Value(“${person.name”)中的person.name在配置文件application.yml中必须存在,若不存在则回报如下的错误:

解决此项错误:在配置文件添加对应的属性或在@Value注解中使用默认值,@Value注解使用默认值方式如下

  • @Value(“${person.name:}”):表示配置文件没有name属性时,name的默认值为空
  • @Value(“${person.name:张三}”):表示配置文件没有name属性时,name的默认值为张三

若配置文件中有对应的属性,则默认值会被配置文件中的值覆盖

此方只适合读取配置文件属性较少时使用

方式二:

使用@ConfigurationProperties注解

application.yml配置文件

server:
  port: 8082

person:
  name: "李四"
  age: 19
  message: 777

使用实例:

@Data
@Configuration
@ConfigurationProperties(prefix = "person")  //perfix绑定配置文件的前缀
public class AppConfig {

    private String name;
    private Integer age;
    private String message;
}

此方法适用于获取配置文件属性较多的情况下使用,具体看个人喜好

方式三:

使用Environment来获取,Environment是有Spring底层提供的Api,也是一个bean

application.yml配置文件

server:
  port: 8083

person:
  name: "王五"
  age: 20
  message: 888

使用实例:

@RestController
public class TestController{

    @Resource
    private Environment environment;

    @GetMapping("/test")
    public UserInfo getUserInfo(){
        UserInfo userInfo = new UserInfo();
        String name = environment.getProperty("person.name");

        Integer age = Integer.valueOf(environment.getProperty("person.age"));
        String message = environment.getProperty("person.message");
        userInfo.setName(name);
        userInfo.setAge(age);
        userInfo.setMessage(message);
        return userInfo;
    }
}

@RestController
public class TestController implements EnvironmentAware {

    private Environment environment;

    @GetMapping("/test")
    public UserInfo getUserInfo(){
        UserInfo userInfo = new UserInfo();
        String name = environment.getProperty("person.name");

        Integer age = Integer.valueOf(environment.getProperty("person.age"));
        String message = environment.getProperty("person.message");
        userInfo.setName(name);
        userInfo.setAge(age);
        userInfo.setMessage(message);
        return userInfo;
    }

    @Override
    public void setEnvironment(Environment environment) {
        this.environment = environment;
    }
}

此方法适用于动态获取配置文件信息的情况下使用

以上三种方式是获取Spring默认的全局配置文件

另外还有获取外部配置文件:参考链接