springboot配置文件使用方式
參數(shù)配置化
一些配置信息寫在Java代碼中,如果我們在做項(xiàng)目時(shí)每涉及到一個(gè)第三方技術(shù)服務(wù),就將其參數(shù)硬編碼,那么在Java程序中會(huì)存在兩個(gè)問題:
- 如果這些參數(shù)發(fā)生變化了,就必須在源程序代碼中改動(dòng)這些參數(shù),然后需要重新進(jìn)行代碼的編譯,將Java代碼編譯成class字節(jié)碼文件再重新運(yùn)行程序。(比較繁瑣)
- 如果我們開發(fā)的是一個(gè)真實(shí)的企業(yè)級項(xiàng)目, Java類可能會(huì)有很多,如果將這些參數(shù)分散的定義在各個(gè)Java類當(dāng)中,我們要修改一個(gè)參數(shù)值,我們就需要在眾多的Java代碼當(dāng)中來定位到對應(yīng)的位置,再來修改參數(shù),修改完畢之后再重新編譯再運(yùn)行。(參數(shù)配置過于分散,是不方便集中的管理和維護(hù))
為了解決以上分析的問題,我們可以將參數(shù)配置在配置文件中。
如下:
#????? spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/tlias spring.datasource.username=root spring.datasource.password=mysql #??mybatis????? mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl #???????? ? ?????????? mybatis.configuration.map-underscore-to-camel-case=true #配置單個(gè)文件最大上傳大小 spring.servlet.multipart.max-file-size=10MB #配置單個(gè)請求最大上傳大小(一次請求可以上傳多個(gè)文件) spring.servlet.multipart.max-request-size=100MB #自定義的阿里云OSS配置信息 aliyun.oss.endpoint=https://oss-cn-hangzhou.aliyuncs.com aliyun.oss.accessKeyId=LTAI4GCH1vX6DKqJWxd6nEuW aliyun.oss.accessKeySecret=yBshYweHOpqDuhCArrVHwIiBKpyqSL aliyun.oss.bucketName=web-tlias
使用@Component進(jìn)行注解
使用@Value注解用于外部配置的屬性注入,具體用法為:
@Value("${配置文件中的key}")@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;
//省略其他代碼...
} @Value不是lombok的包,而是spring包內(nèi)。不要導(dǎo)錯(cuò)包
yml配置格式
SpringBoot提供了多種屬性配置方式:
application.properties:
server.port=8080 server.address=127.0.0.1
application.yml:
server: port: 8080 address: 127.0.0.1
application.yaml:
server: port: 8080 address: 127.0.0.1
XML:
<server> <port>8080</port> <address>127.0.0.1</address> </server>
yml 格式的配置文件,后綴名有兩種:
- yml (推薦)
- yaml
yml格式的數(shù)據(jù)有以下特點(diǎn):
- 容易閱讀
- 容易與腳本語言交互
- 以數(shù)據(jù)為核心,重?cái)?shù)據(jù)輕格式
yml基本語法
- 大小寫敏感
- 數(shù)值前邊必須有空格,作為分隔符
- 使用縮進(jìn)表示層級關(guān)系,縮進(jìn)時(shí),不允許使用Tab鍵,只能用空格(idea中會(huì)自動(dòng)將Tab轉(zhuǎn)換為空格)
- 縮進(jìn)的空格數(shù)目不重要,只要相同層級的元素左側(cè)對齊即可
#表示注釋,從這個(gè)字符一直到行尾,都會(huì)被解析器忽略
yml數(shù)據(jù)格式
對象/map集合:
user: name: Tom age: 20 address: beijing
數(shù)組/List/Set
hobby: - Java - C - Python
@ConfigurationProperties
Spring提供的簡化方式套路:
1.需要?jiǎng)?chuàng)建一個(gè)實(shí)現(xiàn)類,且實(shí)體類中的屬性名和配置文件當(dāng)中key的名字必須要一致。比如:配置文件當(dāng)中叫endpoints,實(shí)體類當(dāng)中的屬性也得叫endpoints,另外實(shí)體類當(dāng)中的屬性還需要提供 getter / setter方法
2.需要將實(shí)體類交給Spring的IOC容器管理,成為IOC容器當(dāng)中的bean對象
3.在實(shí)體類上添加@ConfigurationProperties注解,并通過perfect屬性來指定配置參數(shù)項(xiàng)的前綴
AliOSSUtilsProperties.java:
package com.intelligent_learning_aid_system.utils;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliOSSUtilsProperties {
private String endpoint;
private String accessKeyId;
private String accessKeySecret;
private String bucketName;
}
AliOSSUtils.java:
package com.intelligent_learning_aid_system.utils;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;
/**
* 阿里云 OSS 工具類
*/
@Component
public class AliOSSUtils {
@Autowired
private AliOSSUtilsProperties aliOSSUtilsProperties;
public String upload(MultipartFile file) throws IOException {
// 獲取配置文件中的值
String endpoint = aliOSSUtilsProperties.getEndpoint();
String accessKeyId = aliOSSUtilsProperties.getAccessKeyId();
String accessKeySecret = aliOSSUtilsProperties.getAccessKeySecret();
String bucketName = aliOSSUtilsProperties.getBucketName();
// 獲取上傳文件的 輸入流
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("http://")[0] + "http://" + bucketName + "." + endpoint.split("http://")[1] + "/" + fileName;
// 關(guān)閉ossClient
ossClient.shutdown();
return url;// 把上傳到oss的路徑返回
}
}

這個(gè)警告提示是告知我們還需要引入一個(gè)依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>當(dāng)我們在pom.xml文件當(dāng)中配置了這項(xiàng)依賴之后,我們重新啟動(dòng)服務(wù),大家就會(huì)看到在properties或者是yml配置文件當(dāng)中,就會(huì)提示阿里云 OSS 相關(guān)的配置項(xiàng)。
所以這項(xiàng)依賴它的作用就是會(huì)自動(dòng)的識(shí)別被@Configuration Properties注解標(biāo)識(shí)的bean對象。
Value和ConfigurationProperties區(qū)別
相同點(diǎn):都是用來注入外部配置的屬性的。
不同點(diǎn):
- @Value注解只能一個(gè)一個(gè)的進(jìn)行外部屬性的注入。
- @ConfigurationProperties可以批量的將外部的屬性配置注入到bean對象的屬性中。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
IDEA創(chuàng)建SpringBoot項(xiàng)目整合mybatis時(shí)mysql-connector-java報(bào)錯(cuò)異常的詳細(xì)分析
SpringBoot進(jìn)行多表查詢功能的實(shí)現(xiàn)
MyBatis自定義resultMap三種映射關(guān)系示例詳解
Java設(shè)計(jì)模式之單例設(shè)計(jì)模式解析

