zoukankan      html  css  js  c++  java
  • SpringBoot自定义属性配置以及@ConfigurationProperties注解与@Value注解区别

    我们可以在application.properties中配置自定义的属性值,为了获取这些值,我们可以使用spring提供的@value注解,还可以使用springboot提供的@ConfigurationProperties注解非常方便的完成属性值的注入。

    1. 在application.properties中添加自定义属性配置

    #七牛oss配置
    qiniu.accessKey = zcqSW4uul68vm7K_ryHEYPVTpM-9H7UP0eslY3xk
    qiniu.secretKey = 2QwaKSktWm5O1sIaqQqzqOMF6WtD6sncNnRaYB4w
    qiniu.bucket = blog
    qiniu.path = http://static.wangkaihua.com
    
    

    2. 编写Bean类,加载属性

    Sam类需要添加@Component注解,让spring在启动的时候扫描到该类,并添加到spring容器中。

    第一种:使用spring支持的@Value()实现

    import org.springframework.stereotype.Component;
    
    /**
     * 七牛oss 文件上传的相关配置类
     * @author wangkaihua
     */
    
    @Component
    public class QiNiuConfig {
        @Value("${qiniu.accessKey}")
        private String accessKey;
        
        @Value("${qiniu.secretKey}")
        private String secretKey;
    
        @Value("${qiniu.bucket}")
        private String bucket;
    
        @Value("${qiniu.path}")
        private String path;
        //省略getXXX、setXXX方法
    }
    
    

    第二种:使用@ConfigurationProperties(prefix="") 设置前缀,属性上不需要添加注解。

    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    /**
     * 七牛oss 文件上传的相关配置类
     * @author wangkaihua
     */
    @Component
    @ConfigurationProperties(prefix = "qiniu")
    public class QiNiuConfig {
        private String accessKey;
        private String secretKey;
        private String bucket;
        private String path;
        //省略getXXX、setXXX方法
    }
    

    3. 在controller中或者service中注入并使用QiNiuConfig这个Bean。

    @Component
    public class QiniuUtil {
        @Autowired
        private QiNiuConfig qiNiuConfig;
     
        public String uploadImg(FileInputStream file) throws QiniuException {
    	// 省略xxxxxx
            System.out.printl("获取自定义属性值:"+qiNiuConfig.getPath());
            System.out.printl("获取自定义属性值:"+qiNiuConfig.getBucket());
        }
    }
    

    区别

    • @ConfigurationProperties能够批量注入配置文件的属性。@Value只能一个个指定。
    • @ConfigurationProperties支持松散绑定。@ConfigurationProperties(prefix = "person"),只需要指定一个前缀,就能绑定有这个前缀的所有属性值。
    • @Value支持SpringEl的语法。@ConfigurationProperties不支持SpringEl的语法。
    • @ConfigurationProperties还支持JSR303进行配置文件值及校验。
    @Component
    @ConfigurationProperties(prefix = "qiniu")
    @Validated
    public class QiNiuConfig {
        @NotNull
        private String accessKey;
        @NotNull
        private String secretKey;
        @NotNull
        private String bucket;
        @Email
        private String path;
        //省略getXXX、setXXX方法
    }
    

    当我们注入的不是一个邮箱格式时,启动项目报错:

    ***************************
    APPLICATION FAILED TO START
    ***************************
    Description:
    Binding to target com.wangkaihua.myblog.common.QiNiuConfig@3e792ce3 failed:
        Property: qiniu.path
        Value: http://static.wangkaihua.com
        Reason: 不是一个合法的电子邮件地址
    Action:
    Update your application's configuration
    

    总结

    如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value,如果我们要编写了一个javabean和配置文件进行映射,就直接使用ConfigurationProperties简化配置;

  • 相关阅读:
    常用docker命令
    docker环境安装rabbitmq
    docker环境安装mongdb
    docker 安装redis
    docker 安装mysql
    spring关于resource文件加载原理解析(转的一篇文章)
    ✡ leetcode 165. Compare Version Numbers 比较两个字符串数字的大小 --------- java
    ✡ leetcode 164. Maximum Gap 寻找最大相邻数字差 --------- java
    ✡ leetcode 163. Missing Ranges 找出缺失范围 --------- java
    ✡ leetcode 161. One Edit Distance 判断两个字符串是否是一步变换 --------- java
  • 原文地址:https://www.cnblogs.com/wangkaihua/p/10165290.html
Copyright © 2011-2022 走看看