配置文件
在Java Web开发中,配置文件的使用是非常重要的一环。它可以帮助我们将一些常量、第三方服务的参数等信息从代码中分离出来,使得代码更加清晰、易于维护。在Spring Boot中,配置文件的使用尤为方便,支持多种格式的配置文件,如properties
和yml
(或yaml
)。
1 参数配置化
在我们之前的程序中,涉及到文件上传时,需要调用AliOSSUtils工具类将文件上传到阿里云OSS对象存储服务中。而在调用工具类进行文件上传时,需要一些参数,如endpoint
、accessKeyID
、accessKeySecret
和bucketName
。这些参数原本是直接写死在Java代码中的,这样存在一些问题:
- 如果这些参数发生变化,必须修改源代码并重新编译。
- 参数配置过于分散,不方便集中管理和维护。
为了解决这些问题,我们可以将参数配置在配置文件中。例如,在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中配置文件的使用,包括properties
和yml
格式的配置文件,以及如何使用@Value
和@ConfigurationProperties
注解来注入配置参数。合理使用配置文件和注解,可以使代码更加清晰、易于维护。