当前位置: 首页 > article >正文

@Value和@ConfigurationProperties的区别,以及@ConfigurationProperties的配置依赖

@Value@ConfigurationProperties都是Spring框架中用于注入配置属性的注解,但@Value@ConfigurationProperties都是Spring框架中用于注入配置属性的注解,但它们之间有一些区别:

1.来源不同:

  • @Value:用于从简单的属性文件中注入值,如application.properties或application.yml。
  • @ConfigurationProperties:用于从带有嵌套属性的复杂配置文件中注入值,如application.yml。

2.类型安全:

  • @Value:不支持类型安全,需要使用字符串拼接或者第三方库(如Apache Commons BeanUtils)进行类型转换。
  • @ConfigurationProperties:支持类型安全,通过自动绑定和类型转换实现。

3.复杂性:

  • @Value:适用于简单的属性注入场景。
  • @ConfigurationProperties:适用于复杂的配置文件场景,可以处理嵌套属性、列表、集合等。

4.自定义属性:

  • @Value:不支持自定义属性。
  • @ConfigurationProperties:支持自定义属性,可以通过prefixignoreInvalidFields等参数进行配置。

配置文件如下:

spring:
  #文件上传的配置
  servlet:
    multipart:
     max-file-size: 10MB
     max-request-size: 100MB
  #数据库连接信息
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/tlias
    username: root
    password: chen

#Mybatis配置
mybatis:
  configuration:
   log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
   map-underscore-to-camel-case: true

aliyun:
  oss:
    endpoint: https://oss-cn-hangzhou.aliyuncs.com
    accessKeyId: LTAI5tHmxxxxxxPbPg3Acs
    accessKeySecret: 5dywdOaBWzNsGXxxxxlias

使用@Value的注解方式:

@Component
public class AliOSSUtils {
    @Value("${aliyun.oss.endpoint}")
    private String endpoint;
    @Value("${aliyun.oss.accessKeyId}")
    private String accessKeyId;
    @Value("${aliyun.oss.accessKeySecret}")
    private String accessKeySecret;
    @Value("${aliyun.oss.bucketName}")
    private String bucketName;

    /**
     * 实现上传图片到OSS
     */
    public String upload(MultipartFile file) throws IOException {
        // 获取上传的文件的输入流
        InputStream inputStream = file.getInputStream();

        // 避免文件覆盖
        String originalFilename = file.getOriginalFilename();
        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));

        //上传文件到 OSS
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        ossClient.putObject(bucketName, fileName, inputStream);

        //文件访问路径
        String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
        // 关闭ossClient
        ossClient.shutdown();
        return url;// 把上传到oss的路径返回
    }

}

使用@ConfigurationProperties的方式注入:

首先配置依赖:

<!--        添加ConfigurationProperties-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
        </dependency>

定义一个属性类:

@Data
@Component
@ConfigurationProperties(prefix = "aliyun-oss")
public class AliOSSUtilsProperties {
    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;
}

 说明一下,@Date是getter和setter方法的注入,也是需要引入相关的依赖的lambok

        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

 将私有化的属性对象,引入到相关类中:

@Component
public class AliOSSUtils {
    private AliOSSUtilsProperties aliOSSUtilsProperties;
    /**
     * 实现上传图片到OSS
     */
    public String upload(MultipartFile file) throws IOException {
        String accessKeyId = aliOSSUtilsProperties.getAccessKeyId();
        String bucketName = aliOSSUtilsProperties.getBucketName();
        String endpoint = aliOSSUtilsProperties.getEndpoint();
        String accessKeySecret = aliOSSUtilsProperties.getAccessKeySecret();
        // 获取上传的文件的输入流
        InputStream inputStream = file.getInputStream();

        // 避免文件覆盖
        String originalFilename = file.getOriginalFilename();
        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));

        //上传文件到 OSS
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        ossClient.putObject(bucketName, fileName, inputStream);

        //文件访问路径
        String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
        // 关闭ossClient
        ossClient.shutdown();
        return url;// 把上传到oss的路径返回
    }
}

总的来说,@Value是引入较少的配置信息,而@ConfigurationPorperties是针对引入较多的依赖! 

完结,撒花!


http://www.kler.cn/a/150215.html

相关文章:

  • el-upload,上传文件,后端提示信息,前端需要再次重新上传(不用重新选择文件)
  • 虚拟化环境中的精简版 Android 操作系统 Microdroid
  • 「Qt Widget中文示例指南」如何实现窗口嵌入?
  • 信息学科平台设计与实现:Spring Boot技术详解
  • copyq禁止访问网络(ubuntu cgroup)
  • energy 发布 v2.4.5
  • 详解前后端交互时PO,DTO,VO模型类的应用场景
  • [论文阅读]CT3D——逐通道transformer改进3D目标检测
  • RK3568平台开发系列讲解(Linux系统篇)通过OF函数获取设备树节点实验
  • 云时空社会化商业 ERP 系统 service SQL 注入漏洞复现
  • mySQL踩坑记录
  • 【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷12
  • 从零构建属于自己的GPT系列1:文本数据预处理、文本数据tokenizer、逐行代码解读
  • SparkSQL远程调试(IDEA)
  • 深入了解Jackson库中的ObjectMapper:Java对象的序列化和反序列化
  • qt 简单了解QHBoxLayout QVBoxLayout QFormLayout水平,垂直,表单布局管理器.
  • BUUCTF刷题之路-pwn-ciscn_2019_n_81
  • Elasticsearch 聚合查询(Aggregation)详解
  • 虚拟机指定开放数据库3306端口
  • Golang开发之------ Beego框架
  • 异步操作的方法
  • genimage 打包镜像
  • ESP32-Web-Server编程- WebSocket 编程
  • leetcode二叉树
  • Spring Boot项目Service类单元测试自动生成
  • TikTok区块链实践:数字社交媒体的去中心化未来