在上一篇中我們簡單的介紹了springboot項目的創建及其啟動方式。在這一篇中我們主要介紹一下springboot項目的個性化配置。因為通過上一篇中知識我們知道springboot項目的默認端口為8080,那如果我要修改這個默認端口,應該怎么改呢?又比如springboot項目在啟動時,默認是沒有項目名字的,那如果我們想要添加自己喜歡的項目名字又該怎么辦呢?這些都在這一篇的內容中。好了,下面我們詳細介紹一下怎么修改springboot項目中的默認配置。
修改默認端口
在上一篇的springboot項目中我們看到在resources目錄中有一個application.properties文件,這個文件就是讓我們個性化配置springboot項目參數的,也就是說,在這個文件中按照springboot為我們提供的參數名,就可以直接修改springboot項目的默認參數。下面我們嘗試修改springboot項目的默認端口。具體修改如下:
在application.properties文件中添加下面的參數,然后,啟動application.properties文件項目即可。
1
|
server.port= 8081 |
并且如果我們使用idea開發工具時,當我們在在application.properties文件中輸入參數時,idea就會自動為我們提供相關參數提示,這樣方便我們修改。也就是如下圖所示:
這時我們啟動springboot項目并且用8080端口訪問項目時,發現已經找不到服務了。
而如果我們用訪問8081端口訪問項目,則發現服務可以正常訪問。這就說明,我們已經成功將springboot項目的默認端口修改為8081端口了。
雖然上面的方式已經成功的修改了springboot項目的默認參數,但在實際的開發中,并不推薦使用application.properties文件的方式修改,因為在springboot項目中有更推薦的方式。也就是使用yml文件的方式。
application.yml文件
使用yml文件的方式修改默認參數,也比較簡單,也就是把application.properties文件文件修改為application.yml文件即可。唯一不同的方式,就是yml文件有自己獨特的語法,和properties文件不同,可以省略很多參數,并且瀏覽比較直觀。下面我們嘗試用yml文件的方式,將springboot的端口修改為8082端口。
啟動項目后訪問剛剛的8081端口,發現項目已經訪問不了。
這時我們訪問8082端口,發現項目訪問又正常了,這就說明我們使用yml的方式修改springboot的默認參數方式成功了。
如果我們訪問http://localhost:8082/jilinwu...地址,即可看到springboot接口返回的數據。
修改默認項目名
下面我們還將使用yml的方式配置springboot項目的項目名。具體參數如下:
1
2
3
|
server: port: 8082 context-path: /springboot |
我們繼續啟動項目然后依然訪問http://localhost:8082/jilinwu...地址,這時發現接口訪問失敗。
然后我們訪問http://localhost:8082/springb...地址,發現服務又可正常訪問了。
獲取配置文件中參數
在實際的項目開發中,我們通常會遇到,讀取配置文件中的參數,那么在springboot中怎么獲取配置文件中的參數呢?下面我們在配置文件中添加如下參數。
1
2
3
4
5
6
|
server: port: 8082 context-path: /springboot email: username: jilinwula password: 123456 |
下面我們在controller中采用如下的方式讀取配置文件中的參數。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
@restcontroller @requestmapping ( "/jilinwula" ) public class jilinwulacontroller { @value ( "${email.username}" ) private string username; @value ( "${email.password}" ) private string password; @requestmapping ( "/helloworld" ) public object helloworld() { map<string, object> map = new hashmap<string, object>(); map.put( "username" , username); map.put( "password" , password); return map; } } |
我們可以直接使用@value注解來獲取配置文件中的參數,并且這個注解不只是在springboot中可以使用,這個注解在spring的項目中也可以使用。下面我們啟動項目,并訪問http://localhost:8082/springb...地址,看看是不是可以成功的獲取配置文件中的參數。
我們看上圖所示,我們成功的獲取到了配置文件中的參數。但如果有強迫證的人,對于上面的代碼難免有些不滿意。因為如果我們要獲取配置文件中非常多的參數時,要是按照上面的代碼編寫,則需要在代碼中編寫大量的@value注解,這顯然是不合理的。那有沒有比較方便的辦法呢?答案一定是有的,并且springboot為我們提供了非常方便的方法獲取配置文件中的參數。下面我們看一下這種方式。
我們首先要在項目的pom.xml中添加以下依賴:
1
2
3
4
5
6
7
8
9
10
11
12
|
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-configuration-processor</artifactid> <optional> true </optional> </dependency> <dependency> <groupid>org.projectlombok</groupid> <artifactid>lombok</artifactid> <version> 1.18 . 4 </version> <scope>provided</scope> </dependency> |
第一個依賴是自動獲取配置文件參數的必須依賴,而下面的依賴,則是可以用注解的方式動態生成get和set方法,這樣我們在開發時,就不用在寫get和set方法了,在實際的項目中比較常用。在使用lombok生成get和set方法時,還要在idea中添加相應的lombok插件,否則idea會提示到不到get和set方法的警告。
其次我們新創建一下獲取配置參數的類,并且添加@configurationproperties注解,該注解會自動將配置文件中的參數注入到類中的屬性中(不需要寫@value注解)。并且可以指定prefix參數來指定要獲取配置文件中的前綴。具體代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
|
package com.jilinwula.springboot.helloworld; import lombok.data; import org.springframework.boot.context.properties.configurationproperties; @component @configurationproperties (prefix = "email" ) @data public class emailproperties { private string username; private string password; } |
上面中的@data,注解就是動態生成get和set方法的所以上述的代碼是不需要寫get和set方法的。下面我們看一下controller中的代碼修改:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
package com.jilinwula.springboot.helloworld; import org.springframework.beans.factory.annotation.autowired; import org.springframework.beans.factory.annotation.value; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.restcontroller; import java.util.hashmap; import java.util.map; @restcontroller @requestmapping ( "/jilinwula" ) public class jilinwulacontroller { @autowired private emailproperties emailproperties; @requestmapping ( "/helloworld" ) public object helloworld() { map<string, object> map = new hashmap<string, object>(); map.put( "username" , emailproperties.getusername()); map.put( "password" , emailproperties.getpassword()); return map; } } |
下面我們啟動項目并訪問接口看看是否能夠成功獲取配置文件中的參數。
下面我們介紹一下在springboot中怎么處理不同環境中獲取不同的配置參數。下面我們模擬兩人環境一個是開發環境,一個是測試環境,我們暫時以不同端口來區分這兩個環境的區別。
application-dev.yml:
1
2
3
4
5
6
|
server: port: 8081 context-path: /springboot email: username: jilinwula password: 123456 |
application-test.yml:
1
2
3
4
5
6
|
server: port: 8082 context-path: /springboot email: username: jilinwula password: 654321 |
application.yml:
1
2
3
|
spring: profiles: active: dev |
這樣當我們在application.yml文件中的參數設置為dev時,springboot項目在啟動時就會讀取application-dev.yml中的參數。如果我們將參數設置為test時,則springboot會讀取application-test.yml文件中的參數。
下面我們分別啟動項目并且訪問接口:
當參數為dev:
當參數為test:
啟動時指定參數
在上一篇中我們已經介紹過了我們可以使用java -jar 項目的名字的方式啟動springboot項目。并且,該方式還支持指定springboot參數,例如上面剛剛介紹的指定獲取同環境的配置參數。具體命里如下:
1
|
java -jar jilinwula-springboot-helloworld- 0.0 . 1 -snapshot.jar --spring.profiles.active=dev |
我們此時繼續訪問接口發現還是成功的獲取了dev環境中的參數。
上述內容就是springboot個性化配置的內容,如有不正確,或者需要交流的,歡迎留言,謝謝。
項目源碼:
https://github.com/jilinwula/jilinwula-springboot-helloworld2
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://segmentfault.com/a/1190000018080104