天天看點

spring boot 1.5.4 配置檔案詳解(八)1      Spring Boot配置檔案詳解

相信很多人選擇Spring Boot主要是考慮到它既能兼顧Spring的強大功能,還能實作快速開發的便捷。我們在Spring Boot使用過程中,最直覺的感受就是沒有了原來自己整合Spring應用時繁多的XML配置内容,替代它的是在pom.xml中引入子產品化的Starter POMs,其中各個子產品都有自己的預設配置,是以如果不是特殊應用場景,就隻需要在application.properties中完成一些屬性配置就能開啟各子產品的應用。

關于application.properties的使用,主要用來配置資料庫連接配接、日志相關配置等。除了這些配置内容之外,還有一些在application.properties配置中的其他特性和使用方法。

spring boot配置詳解spring-boot-jsp項目源碼:

1,在application.properties中添加

# 自定義屬性和加載

wyait.name=wyait

wyait.title=Spring boot之web開發

2,新增properties包,建立ParamPropertis類加載配置屬性

@Component

public class ParamProperties {

   @Value("${wyait.name}")

   privateString wyaitName;

   @Value("${wyait.title}")

   privateString wyaitTitle;

   //TODOgetter和setter方法

}

3,在CatController新增方法調用ParamProperties

   @Autowired

   privateParamProperties paramProperties;

   @ApiIgnore

   @RequestMapping("/wyait")

   @ResponseBody

   publicString getMsg(HttpServletResponse response) {

      LOGGER.debug("===========>>>>"+ paramProperties);

      //會有中文亂碼問題 TODO

      returnparamProperties.getWyaitName() + " 正在寫"

           +paramProperties.getWyaitTitle();

   }

4,啟動,通路:http://127.0.0.1:8080/cat/wyait

<a href="https://s2.51cto.com/wyfs02/M01/07/89/wKiom1nLS02TW7qhAABa4liXtoI223.png" target="_blank"></a>

1,properties參數間引用

wyait.title=Spring boot web

# 參數間引用

wyait.message=${wyait.name} do${wyait.title}.docx

參數:wyait.message引用了上文中的name和title屬性的值,通過${}

2,ParamPropertis類加載配置屬性

   @Value("${wyait.message}")

   privateString wyaitMessage;

3,CatController

           +paramProperties.getWyaitTitle() + "!總結:"

           +paramProperties.getWyaitMessage();

<a href="https://s2.51cto.com/wyfs02/M02/07/89/wKiom1nLS1bBbuYEAABe0uYjCus073.png" target="_blank"></a>

在一些情況下,有些參數我們需要希望它不是一個固定的值,比如密鑰、服務端口等。Spring Boot的屬性配置檔案中可以通過${random}來産生int值、long值或者string字元串,來支援屬性的随機值。

# 随機字元串

com.wyait.value=${random.value}

# 随機int

com.wyait.number=${random.int}

# 随機long

com.wyait.bignumber=${random.long}

# 10以内的随機數

com.wyait.test1=${random.int(10)}

# 10-20的随機數

com.wyait.test2=${random.int[10,20]}

相信使用過一段時間Spring Boot的使用者,一定知道這條指令:java-jar xxx.jar --server.port=8888,通過使用–server.port屬性來設定xxx.jar應用的端口為8888。

在指令行運作時,連續的兩個減号--就是對application.properties中的屬性值進行指派的辨別。是以,java -jar xxx.jar --server.port=8888指令,等價于我們在application.properties中添加屬性server.port=8888,該設定在樣例工程中可見,讀者可通過删除該值或使用指令行來設定該值來驗證。

通過指令行來修改屬性值固然提供了不錯的便利性,但是通過指令行就能更改應用運作的參數,那豈不是很不安全?是的,是以Spring Boot也貼心的提供了屏蔽指令行通路屬性的設定,隻需要這句設定就能屏蔽:SpringApplication.setAddCommandLineProperties(false)。

如:

// 這是一個配置Spring的配置類

@Configuration

// @SpringBootApplication:Spring Boot項目的核心注解,主要目的是開啟自動配置。

@SpringBootApplication

public class DemoApplication {

   publicstatic void main(String[] args) {

      //啟動spring boot應用

      SpringApplicationsa = new SpringApplication(DemoApplication.class);

      //禁用devTools熱部署

      System.setProperty("spring.devtools.restart.enabled","false");

      //禁用指令行更改application.properties屬性

      sa.setAddCommandLineProperties(false);

      sa.run(args);

我們在開發Spring Boot應用時,通常同一套程式會被應用和安裝到幾個不同的環境,比如:開發、測試、生産等。其中每個環境的資料庫位址、伺服器端口等等配置都會不同,如果在為不同環境打包時都要頻繁修改配置檔案的話,那必将是個非常繁瑣且容易發生錯誤的事。

對于多環境的配置,各種項目建構工具或是架構的基本思路是一緻的,通過配置多份不同環境的配置檔案,再通過打包指令指定需要打包的内容之後進行區分打包,Spring Boot也不例外,或者說更加簡單。

在Spring Boot中多環境配置檔案名需要滿足application-{profile}.properties的格式,其中{profile}對應你的環境辨別,比如:

application-dev.properties:開發環境

application-test.properties:測試環境

application-prod.properties:生産環境

至于哪個具體的配置檔案會被加載,需要在application.properties檔案中通過spring.profiles.active屬性來設定,其值對應{profile}值。

如:spring.profiles.active=test就會加載application-test.properties配置檔案内容

下面,以不同環境配置不同的服務端口為例,進行樣例實驗。

針對各環境建立不同的配置檔案application-dev.properties、application-test.properties、application-prod.properties

在這三個檔案均都設定不同的server.port屬性,如:dev環境設定為1111,test環境設定為2222,prod環境設定為3333

application.properties中設定spring.profiles.active=dev,就是說預設以dev環境設定

測試不同配置的加載

執行java -jar xxx.jar,可以觀察到服務端口被設定為8080,也就是預設的開發環境(dev)

執行java -jar xxx.jar --spring.profiles.active=test,可以觀察到服務端口被設定為2222,也就是測試環境的配置(test)

執行java -jar xxx.jar --spring.profiles.active=prod,可以觀察到服務端口被設定為3333,也就是生産環境的配置(prod)

按照上面的實驗,可以如下總結多環境的配置思路:

application.properties中配置通用内容,并設定spring.profiles.active=dev,以開發環境為預設配置

application-{profile}.properties中配置各個環境不同的内容(資料源、日志級别、參數等)

通過指令行方式去激活不同環境的配置

本文轉自 wyait 51CTO部落格,原文連結:http://blog.51cto.com/wyait/1969160,如需轉載請自行聯系原作者