springboot配置文件使用方式
參數(shù)配置化
一些配置信息寫在Java代碼中,如果我們在做項(xiàng)目時(shí)每涉及到一個第三方技術(shù)服務(wù),就將其參數(shù)硬編碼,那么在Java程序中會存在兩個問題:
- 如果這些參數(shù)發(fā)生變化了,就必須在源程序代碼中改動這些參數(shù),然后需要重新進(jìn)行代碼的編譯,將Java代碼編譯成class字節(jié)碼文件再重新運(yùn)行程序。(比較繁瑣)
- 如果我們開發(fā)的是一個真實(shí)的企業(yè)級項(xiàng)目, Java類可能會有很多,如果將這些參數(shù)分散的定義在各個Java類當(dāng)中,我們要修改一個參數(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 #配置單個文件最大上傳大小 spring.servlet.multipart.max-file-size=10MB #配置單個請求最大上傳大小(一次請求可以上傳多個文件) 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)錯包
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中會自動將Tab轉(zhuǎn)換為空格)
- 縮進(jìn)的空格數(shù)目不重要,只要相同層級的元素左側(cè)對齊即可
#
表示注釋,從這個字符一直到行尾,都會被解析器忽略
yml數(shù)據(jù)格式
對象/map集合:
user: name: Tom age: 20 address: beijing
數(shù)組/List/Set
hobby: - Java - C - Python
@ConfigurationProperties
Spring提供的簡化方式套路:
1.需要創(chuàng)建一個實(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的路徑返回 } }
這個警告提示是告知我們還需要引入一個依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> </dependency>
當(dāng)我們在pom.xml文件當(dāng)中配置了這項(xiàng)依賴之后,我們重新啟動服務(wù),大家就會看到在properties或者是yml配置文件當(dāng)中,就會提示阿里云 OSS 相關(guān)的配置項(xiàng)。
所以這項(xiàng)依賴它的作用就是會自動的識別被@Configuration Properties
注解標(biāo)識的bean對象。
Value和ConfigurationProperties區(qū)別
相同點(diǎn):都是用來注入外部配置的屬性的。
不同點(diǎn):
- @Value注解只能一個一個的進(jìn)行外部屬性的注入。
- @ConfigurationProperties可以批量的將外部的屬性配置注入到bean對象的屬性中。
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章

IDEA創(chuàng)建SpringBoot項(xiàng)目整合mybatis時(shí)mysql-connector-java報(bào)錯異常的詳細(xì)分析

SpringBoot進(jìn)行多表查詢功能的實(shí)現(xiàn)

MyBatis自定義resultMap三種映射關(guān)系示例詳解

Java設(shè)計(jì)模式之單例設(shè)計(jì)模式解析