全局配置文件操作
我們已經去構建了SpringBoot項目,在這個項目當中,與全局配置文件的一個講解,雖然在之前,講解了SpringBoot的全局配置文件,那么咱們還有一些內容呢,沒有講到,我們再做一個補充,我們看全局配置文件中的第一個內容,修改端口號,修改內嵌容器的端口號,回到我們的項目當中,其實我們知道,在我們的SpringBoot當中,對于內嵌的Tomcat,默認的監聽端口號是8080,在這里我們可以把我們的項目啟動一下,看一下控制臺輸出的監聽的端口號端口,端口號是多少,我們項目啟動完畢以后呢,他默認的監聽的端口號是8080,比如我現在想把端口號改成8888,該怎么去做呢,回到我們的全局配置文件當中,在這里我們只需要添加一個鍵值對就可以了server.port=8888那這個我們要注意的就是,key必須要交server.port,因為springboot在解析的時候,他要去解析這個配置文件,在全局配置文件當中,他發現有server.port了,他知道你要修改服務的端口號,所以這是不能隨便取的一個key,就叫server.port,下面我們再啟動一下我們的項目,我們看一下控制臺輸出,現在是不是變成了8888了Tomcat started on port(s): 8888 (http)那么也就是說我們修改端口也是成功的,這個也就是SpringBoot當中,修改端口號的一個方式,接下來我們再看一下,我們可以在SpringBoot的全局配置文件當中,除了修改端口號以外,還可以做什么呢,比如完成自定義屬性的=配置,那么其實自定義屬性配置,已經講過了,這個叫法大家聽著挺陌生的,這個名這么叫也沒有問題,什么意思呢,比如我現在要在配置文件里,key跟value,這個value呢,他將作為一個配置項,未來會注入到我的代碼當中,如果我想有這樣的一個設計的話,有這樣的一個需求的話,我該怎么去實現呢,很簡單,比如我這里有一個msg,然后后面給一個value,就叫Hello World,現在我就要把msg所對應的value通過一定的方式,注入到我的代碼當中,我們來看一下這怎么做,首先我添加一個key和value,然后我們去創建一個Controller,然后這個名字叫HelloWorldController,然后在這個Controller當中,我們先去用一個@RestController,這個注解大家應該知道是什么意思了,也就是以JSON格式來返回了,然后再加一個@RequestMapping,將一個URL綁定到一個方法上,我就叫hello,然后定義一個方法返回String,叫showMsg,然后這個方法寫完了,在我的這個Controller當中呢,我有一個成員變量,String類型的,就叫msg,在這里我return這個msg,將他的信息返回,然后我要把key的valule注入到這里,用一個@Value的注解,然后寫一個類似EL表達式的語法,把我們的key填進來,這樣就可以了@RestController
public class HelloWorldController {@Value("${msg}")private String msg;@RequestMapping("/hello")public String showMsg(){return this.msg;}
}我們啟動一下,看能不能得到我們想要的結果,我們觀察控制臺,監聽的端口是8888,打開瀏覽器我們來訪問一下http://localhost:8888/hello我們可以看到,信息是可以拿到的,這種方式我們也可以稱之為自定義屬性配置,這個是配置文件里的值msg=Hello World這是在配置文件當中,自定義屬性的方式,去獲取里面的信息,接下來我們再來看,配置變量引用,在配置文件當中呢,去完成一個配置變量應用,我們來看一下
比如我現在還有一個key,我在上邊定義,叫什么都行,我們叫hello,然后我這里也有一個值,這個值我叫China,hello=China然后我的意思是這樣的,現在我要將hello所對應的value,也就是China,放到我的msg當中,然后再把msg里面的值,注入給我的Controller的msg屬性,那怎么去做呢,我們可以這么去做,在這里我們通過一個EL表達式,類似于EL表達式的語法,其實文件里也是這么寫的,然后把我們的key放到這里,那么這個時候呢,springboot在解析配置文件的時候,根據你的key把value取出來,拼到這個位置,接下來我們來驗證一下,看看能不能達到,我們接下來再來訪問,刷新,看到了嗎localhost:8888/hello這個值在配置文件當中,也已經被取出來了,并且拼到這里了,所以這種方式稱之為配置變量的引用
然后是我們的代碼,Controller里面的代碼是沒有變化的,這是在配置文件當中,完成配置變量引用,我們再來看,在配置變量當中其實還可以做隨機值配置,這是我們需要注意的是,我們有兩種方式來講解,隨機值,通過隨機值的配置來配置隨機值,第二個我們還可以完成隨機端口的配置,配置隨機端口,我們先來看一下,其實這兩個都是非常有用的,咱們來看一下配置隨機值,這什么意思呢,打開我們的配置文件,比如我們在這里有一個key叫num,然后這塊我想給他產生一個隨機數,配置文件當中給num產生一個隨機數,那我應該怎么去做呢,這里我們還是用一個${},里面寫什么呢,其實用了springboot當中對于配置文件一個常量對象,叫random,然后在這個對象下,我們調用一個方法,叫int,這個時候random對象就會給我們產生一個int的隨機值,并且賦予了num,然后在這里呢,把num的值加到msg當中,我們再來訪問頁面num=${random.int}請求這個Controller,看能不能拿到值,我們現在把項目重啟一下msg=Hello World ${hello} ${num}我們看到了,是可以產生一個整數的隨機數,有的人說為什么刷新沒有變化呢,這就是我要說的一個點,我們的配置文件,是不是只在啟動時配置一次,那么只被解析一次,表示隨機值產生的次數只產生一次,他不會隨著你請求次數的變化,而去改變隨機值的,這就是我們需要注意的,這是我們在配置文件里,產生隨機值需要注意的一個點,我們把它整理到筆記當中
其實無論是配置隨機值也好,還是配置隨機端口也好,在我們開發過程當中呢,還是比較有用的,那我們說一下這里有什么用處,配置隨機值,在程序中,如果有一些需要運算,如果一個運算需要隨機值的話,那么可以使用該方式,來生成,注意只生成一次,這是我們需要注意的,我們再來看,我們需要配置隨機值的方式呢,可以去配置隨機端口,隨機端口什么意思呢,我們現在給定的是一個固定端口,那我們其實也可以讓他在每次啟動的時候呢,都擁有不同的端口,怎么去做呢,比較簡單,還是用random來完成server.port=${random.int[1024,9999]}不同的是什么呢,我們的端口是不是要給他限定一個范圍,你要隨機生成,他已經超過我們操作系統所涵蓋的范圍了,0到65535個端口,已經超了,那怎么辦呢,這里可以用中括號來限定他的范圍,比如我讓他的端口范圍在1024到9999之間,其實就是一個正則表達式范圍的限定,我們這么來給定以后呢,其實我們這個端口,他每次啟動的時候,都會有變化的,我們可以來測試一下,回到我們的啟動類當中,我們去啟動它,觀察控制臺,現在端口是4642Tomcat started on port(s): 4642 (http)我們把它關掉,我們再啟動一次,再觀察,是7609Tomcat started on port(s): 7609 (http)所以說這種方式呢,是設置我們隨機端口的一種方式,配置我們的隨機端口,那么這里我們還是說一下,配置隨機端口,配置隨機端口在我們微服務開發,在微服務開發當中呢,也是比較有用的,他的用處我們一般用在哪兒呢,在SpringCloud的微服務中,我們是不需要記錄服務的IP和端口號的,那么我們也就不用去維護服務的端口號,讓他隨機生成就可以了,如果你還要去維護這個端口號呢,是非常麻煩的,因為我們的未來的服務是非常多的,每個服務你都的指定一個端口號,如果你要是忘記指定了,或者沒有指定端口號,那么他就會出現端口搶占的問題,所以你還不如給他一個隨機的端口號,那么我們又講解了一個隨機端口配置的方式,我們主要是講了配置,你像自定義屬性配置我們之前說過,然后像配置隨機值,還有配置變量引用的方式,我們沒有說過,還有端口號,其實當時沒講的原因是什么,涉及不到,只有講微服務的時候,才會涉及到隨機端口的設置,所以在這里呢,把它做了一個補充,以上就是我們要講的內容,主要是講了全局配置文件的操作
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.learn</groupId><artifactId>springboot-hello</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot-hello</name><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.12.RELEASE</version></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><!-- springBoot的啟動器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
#server.port=8888
hello=China
num=${random.int}
#msg=Hello World ${hello}
msg=Hello World ${hello} ${num}
server.port=${random.int[1024,9999]}
package com.learn.springboothello.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloWorldController {@Value("${msg}")private String msg;@RequestMapping("/hello")public String showMsg(){return this.msg;}
}
package com.learn.springboothello;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class SpringbootHelloApplication {public static void main(String[] args) {SpringApplication.run(SpringbootHelloApplication.class, args);}}
?
總結
- 上一篇: SpringBoot快速构建项目
- 下一篇: logback日志记录器讲解