配置文件 springboot

配置文件

在Java Web开发中,配置文件的使用是非常重要的一环。它可以帮助我们将一些常量、第三方服务的参数等信息从代码中分离出来,使得代码更加清晰、易于维护。在Spring Boot中,配置文件的使用尤为方便,支持多种格式的配置文件,如propertiesyml(或yaml)。

1 参数配置化

在我们之前的程序中,涉及到文件上传时,需要调用AliOSSUtils工具类将文件上传到阿里云OSS对象存储服务中。而在调用工具类进行文件上传时,需要一些参数,如endpointaccessKeyIDaccessKeySecretbucketName。这些参数原本是直接写死在Java代码中的,这样存在一些问题:

  1. 如果这些参数发生变化,必须修改源代码并重新编译。
  2. 参数配置过于分散,不方便集中管理和维护。

为了解决这些问题,我们可以将参数配置在配置文件中。例如,在application.properties文件中添加如下配置:

aliyun.oss.endpoint=https://oss-cn-hangzhou.aliyuncs.com
aliyun.oss.accessKeyId=LTAI4GCH1vX6DKqJWxd6nEuW
aliyun.oss.accessKeySecret=yBshYweHOpqDuhCArrVHwIiBKpyqSL
aliyun.oss.bucketName=web-tlias

然后在AliOSSUtils工具类中使用@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;

    // 省略其他代码...
}

这样,当参数需要修改时,只需修改配置文件,无需修改代码和重新编译。

2 yml配置文件

除了properties格式的配置文件,Spring Boot还支持yml(或yaml)格式的配置文件。yml文件的特点是结构清晰、易于阅读,适合复杂配置。

例如,将之前的application.properties文件转换为application.yml文件:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/tlias
    username: root
    password: 1234
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 100MB

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: LTAI4GCH1vX6DKqJWxd6nEuW
    accessKeySecret: yBshYweHOpqDuhCArrVHwIiBKpyqSL
    bucketName: web-397

yml文件的基本语法包括:

  • 大小写敏感
  • 数值前边必须有空格,作为分隔符
  • 使用缩进表示层级关系,缩进时,不允许使用Tab键,只能用空格
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • #表示注释
3 @ConfigurationProperties

当需要注入的属性较多时,使用@Value注解会显得比较繁琐。Spring Boot提供了@ConfigurationProperties注解,可以批量地将配置文件中的属性注入到bean对象的属性中。

例如,定义一个实体类AliOSSProperties

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

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

然后在AliOSSUtils工具类中注入这个实体类:

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

@Component
public class AliOSSUtils {

    @Autowired
    private AliOSSProperties aliOSSProperties;

    public String upload(MultipartFile multipartFile) throws IOException {
        InputStream inputStream = multipartFile.getInputStream();
        String originalFilename = multipartFile.getOriginalFilename();
        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));

        OSS ossClient = new OSSClientBuilder().build(aliOSSProperties.getEndpoint(),
                aliOSSProperties.getAccessKeyId(), aliOSSProperties.getAccessKeySecret());
        ossClient.putObject(aliOSSProperties.getBucketName(), fileName, inputStream);

        String url = aliOSSProperties.getEndpoint().split("//")[0] + "//" + aliOSSProperties.getBucketName() + "." + aliOSSProperties.getEndpoint().split("//")[1] + "/" + fileName;

        ossClient.shutdown();
        return url;
    }
}

使用@ConfigurationProperties注解可以大大简化配置参数的注入,特别是在需要注入的属性较多时。

总结

通过以上讲解,我们了解了Spring Boot中配置文件的使用,包括propertiesyml格式的配置文件,以及如何使用@Value@ConfigurationProperties注解来注入配置参数。合理使用配置文件和注解,可以使代码更加清晰、易于维护。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

需要重新演唱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值