迅速学会@ConfigurationProperties的使用

@ConfigurationProperties标签可以把.yml文件里的配置读取到类里
比如,我需要把钉钉小程序的app-keyapp-secret放在application.yml文件里面,方便我的配置,那么我们就这样在application.yml里编写:

dingding:
  app-key: "dings9oi56464654gfqrfms"
  app-secret: "58786163213546161231321231321aAhbCa8Vw2EVBJiw9_96vd"

现在我们新建一个类,使用注解

@ConfigurationProperties

来获得这些值:

@Setter
@Getter
@ConfigurationProperties(prefix = "dingding")
public class AppInfoConfigProperties {

    private String APP_KEY;

    private String APP_SECRET;

}

注意,被 @ConfigurationProperties 修饰的类必须带有set方法,否则无法获得配置值。

这样一来,AppInfoConfigProperties就可以拿到application.yml里的配置,这里的匹配是宽松匹配,写成

private String appKey;

private String appSecret;

也是可以获取到值的。

在经过以上的步骤后,AppInfoConfigProperties本身并没有加入容器,也就拿不到他的值,下一步我们把它注册成一个Bean:

@EnableConfigurationProperties(AppInfoConfigProperties.class)
@Configuration
public class AppInfoConfig {

    @Autowired
    AppInfoConfigProperties appInfoConfigProperties;

    @Bean("appInfoUtil")
    public AppInfoUtil appInfoUtil(){
        return new AppInfoUtil(appInfoConfigProperties.getAPP_KEY(),appInfoConfigProperties.getAPP_SECRET());
    }
}

这里我们使用了 @EnableConfigurationProperties(AppInfoConfigProperties.class) 来将 AppInfoConfigProperties给注册到了容器里,同时通过 @Autowired拿到了它的值。

至此,application.yml文件中的值已被成功获取到了容器里。

以下是AppInfoUtil 的结构:

@Getter
@Setter
@AllArgsConstructor
public class AppInfoUtil {

    private String appKey;

    private String appSecret;

    @Override
    public String toString() {
        return String.format("本小程序的APP-KEY:[%s];本小程序的APP-SECRET:[%s]",this.getAppKey(),this.getAppSecret());
    }
}

为什么不直接使用AppInfoConfigProperties
原因是因为AppInfoUtil可能会根据业务的需要做出很多的增强功能,所以与配置分离。

以上代码来自我正在进行中的钉钉小程序项目,感兴趣的朋友可以点开看看。
GitHub地址:https://github.com/nsplnpbjy/dingding-contract-app
Gitee地址:https://gitee.com/nsplnpbjy/dingding-contract-app

你可能感兴趣的:(java,spring,spring,boot)