Spring Boot 读取配置内容的三种方式

在实际工作中我们无法避免如何区分多环境的问题,开发环境连接的是开发环境的数据库,测试环境连接的是测试环境的数据库,等等,不同环境下的配置信息是不一样的。在使用SpringBoot时,我们可以为每个环境定义一个配置文件,将对应配置写在yaml或者properties中,最后通过 spring.profiles.active 来激活对应的配置文件。

我们往往会读取配置文件中的配置信息,除了Java提供的Properties类,还可以通过另外的三种方式在 Spring Boot 中读取配置内容:Environment@Value@ConfigurationProperties

Environment

Environment 用于管理当前的应用环境信息,定义了获取 Profile 的方法,同时继承了 PropertyResolver,PropertyResolver 提供了属性访问的相关方法。所以我们通过 Environment 的 getProperty() 方法读取指定配置 Key 的内容。

通过注入Environment的实例,然后调用 getProperty() 方法获取对应的参数:

@RestController
public class TestApi {

    @Autowired
    private Environment environment;

    @GetMapping("/test")
    public void test() {
        String port = environment.getProperty("server.port");
        System.out.println(port);

    }
}

 @Value

在 Controller 中定义一个 port 字段,在 port 上使用 @Value 注入当前项目的端口值,冒号后面是在无值的情况下给的默认值,避免没配置值的报错问题。

@RestController
public class TestApi {

    @Value("${server.port:8080}")
    private String port;

    @GetMapping("/test")
    public void test() {
        System.out.println(port);

    }
}

@ConfigurationProperties

前两种方式都是针对某一个字段属性的,但是有时候我们要需要一系列相关属性(例如数据库的地址,端口,账号等),我们可以使用@ConfigurationProperties将这一系列的属性封装到某个类中。之后在使用时注入这个类就行。

/**
* 编写配置类
*/
@ConfigurationProperties(prefix = "server")
public class ConfigProperties {
    
    private String port;
    
    //省略get,set方法

}


@RestController
public class TestApi {

    @Autowired
    private ConfigProperties configProperties ;

    @GetMapping("/test")
    public void test() {
        System.out.println(configProperties.getPort());

    }
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值