應用程式屬性用於支援在不同的環境中工作。 在本章中,將學習如何組態和指定Spring Boot應用程式的屬性。
Spring Boot應用程式將命令列屬性轉換為Spring Boot環境屬性。命令列屬性優先於其他屬性源。 預設情況下,Spring Boot使用8080
埠號來啟動Tomcat。接下來將學習如何使用命令列屬性更改埠號。
步驟1 - 建立可執行JAR檔案後,使用命令java -jar <JARFILE>
執行它。
步驟2 - 使用下面給出的螢幕截圖中給出的命令,使用命令列屬性更改Spring Boot應用程式的埠號。
註 - 可以使用分隔符
-
提供多個應用程式屬性。
屬性(properties
)檔案用於在單個檔案中保留N
個屬性,以便在不同的環境中執行應用程式。 在Spring Boot中,屬性儲存在類路徑下的application.properties
檔案中。application.properties
檔案位於src/main/resources
目錄中。範例application.properties
檔案的程式碼如下 -
server.port = 9090
spring.application.name = demoservice
請注意,在上面顯示的程式碼中,Spring Boot應用程式demoservice
在埠9090
上啟動。
Spring Boot支援基於YAML的屬性組態來執行應用程式。可以使用application.yml
檔案代替application.properties
。 此YAML檔案也應保留在類路徑中。 application.yml
檔案範例如下 -
spring:
application:
name: demoservice
server:
port: 9090
可以將屬性儲存在不同的位置或路徑中,而不是將屬性檔案儲存在類路徑下。 在執行JAR檔案時,可以指定屬性檔案路徑。 可以使用以下命令在執行JAR時指定屬性檔案的位置 -
-Dspring.config.location = C:\\application.properties
@Value
注釋用於讀取Java程式碼中的環境或應用程式屬性值。讀取屬性值的語法如下所示 -
@Value("${property_key_name}")
請看下面的範例,它顯示了如何使用@Value
批注讀取Java變數中的spring.application.name
屬性值的語法。
@Value("${spring.application.name}")
請遵守下面給出的程式碼以便更好地理解 -
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class DemoApplication {
@Value("${spring.application.name}")
private String name;
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@RequestMapping(value = "/")
public String name() {
return name;
}
}
註 - 如果在執行應用程式時未找到該屬性,則Spring Boot將丟擲非法引數異常,因為無法在值
${spring.application.name}
中解析預留位置'spring.application.name'
。
要解決預留位置問題,可以使用下面給出的thr
語法設定屬性的預設值 -
@Value("${property_key_name:default_value}")
@Value("${spring.application.name:demoservice}")
Spring Boot支援基於Spring活動組態檔案的不同屬性。 例如,可以保留兩個單獨的檔案進行開發和生產,以執行Spring Boot應用程式。
application.properties中的Spring活動組態檔案
下面來了解如何在application.properties 中使用Spring活動組態檔案。 預設情況下,application.
屬性將用於執行Spring Boot應用程式。 如果想使用基於組態檔案的屬性,可以為每個組態檔案保留單獨的屬性檔案,如下所示 -
檔案:application.properties -
server.port = 8080
spring.application.name = demoservice
檔案:application-dev.properties -
server.port = 9090
spring.application.name = demoservice
檔案:application-prod.properties -
server.port = 4431
spring.application.name = demoservice
在執行JAR檔案時,需要根據每個屬性檔案指定spring活動組態檔案。 預設情況下,Spring Boot應用程式使用application.properties 檔案。 設定Spring活動檔案的命令如下所示 -
在控制台紀錄檔中看到活動的組態檔案名稱,如下所示 -
2017-11-26 08:13:16.322 INFO 14028 --- [
main] com.yiibai.demo.DemoApplication :
The following profiles are active: dev
現在,Tomcat已經開始使用埠9090(http),如下所示 -
2017-11-26 08:13:20.185 INFO 14028 --- [
main] s.b.c.e.t.TomcatEmbeddedServletContainer :
Tomcat started on port(s): 9090 (http)
可以設定生產活動組態檔案,如下所示 -
在控制台紀錄檔中看到活動的組態檔案名稱,如下所示 -
2017-11-26 08:13:16.322 INFO 14028 --- [
main] com.yiibai.demo.DemoApplication :
The following profiles are active: prod
現在,Tomcat開始使用4431埠(http),如下所示 -
2017-11-26 08:13:20.185 INFO 14028 --- [
main] s.b.c.e.t.TomcatEmbeddedServletContainer :
Tomcat started on port(s): 4431 (http)
application.yml的Spring活動組態檔案
下面來了解如何為application.yml
保留Spring活動組態檔案。可以將Spring活動組態檔案屬性保留在單個application.yml
檔案中。無需使用像application.properties
這樣的單獨檔案。
以下是將Spring活動組態檔案保留在application.yml
檔案中的範例程式碼。 請注意,分隔符(---
)用於分隔application.yml
檔案中的每個組態檔案。
spring:
application:
name: demoservice
server:
port: 8080
---
spring:
profiles: dev
application:
name: demoservice
server:
port: 9090
---
spring:
profiles: prod
application:
name: demoservice
server:
port: 4431
命令設定開發活動組態檔案如下 -
在控制台紀錄檔中看到活動的組態檔案名稱,如下所示 -
2017-11-26 08:41:37.202 INFO 14104 --- [
main] com.yiibai.demo.DemoApplication :
The following profiles are active: dev
現在,Tomcat開始使用埠9090(http),如下所示 -
2017-11-26 08:41:46.650 INFO 14104 --- [
main] s.b.c.e.t.TomcatEmbeddedServletContainer :
Tomcat started on port(s): 9090 (http)
設定生產活動組態檔案的命令如下 -
在控制台紀錄檔中看到活動的組態檔案名稱,如下所示 -
2017-11-26 08:43:10.743 INFO 13400 --- [
main] com.yiibai.demo.DemoApplication :
The following profiles are active: prod
這將在埠4431(http)上啟動Tomcat,如下所示:
2017-11-26 08:43:14.473 INFO 13400 --- [
main] s.b.c.e.t.TomcatEmbeddedServletContainer :
Tomcat started on port(s): 4431 (http)