Spring Boot 配置詳解

Spring Boot 針對經常使用的開發場景提供了一系列自動化配置來減小本來複雜而又幾乎不多改動的模板配置內容,可是,咱們仍是須要了解如何在Spring Boot中修改這些自動化的配置,以應對一些特殊場景 java

配置文件 spring

Spring Boot的默認配置文件位置爲 src/main/resources/application.properties ,關於 Spring Boot 應用的配置文件內容均可以在該文件中,根據咱們引入的不一樣模塊,能夠在這裏定義容器端口號、數據庫鏈接信息、日誌級別等各類配置信息,經常使用配置以下: 數據庫

  • server.context-path:指定上下文路徑,好比默認訪問路徑是http://localhost:8080,我將之改成http://localhost:8081/hello,就須要配置此屬性值爲 /hello
  • server.port=8090 :指定服務端口號爲 8090
  • spring.application.name=hello:指定應用名(該名字後續Spring Cloud 中會被註冊爲服務名)

自定義參數 app

除了能夠在Spring Boot的配置文件中設置各個模塊中預約義的配置屬性,也能夠在配置文件中定義一些咱們須要的自定義屬性,好比在配置文件中增長以下內容: 框架

book.name = springCloud dom

book.author=李四 工具

而後,能夠在應用中,經過@Value註解來加載這些自定義的參數,好比: 測試

@Component ui

public class Book { spa

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

        private String name;

        @Value ("${book.author}")

        private String author;

}

@Value註解能夠支持兩種表達式來進行配置,以下所示:

  • 一種是上面代碼所示的 PlaceHolder 方式,格式爲${…} 大括號內爲PlaceHolder
  • 另外一種是 SpEL表達式(Spring Expression Language),格式爲 #{…},大括號內爲 SpEL 表達式

經過自定義注入實體,就能夠讀取到配置屬性,示例代碼以下:

@RestController

@RequestMapping ("/hello")

public class HelloController {

   

        @Autowired

        private Book book;

   

        @RequestMapping ("getCount")

        public String getCount() {

                return "ok " + book.getName();

        }

}

參數引用

在 application.properties中的個參數之間能夠直接經過使用 PlaceHolder 的方式來進行引用,好比:

book.name=springCloud

book.author=李四

book.desc= 做者 ${book.author} 寫的 ${book.name}

使用隨機數

在一些特殊的狀況下,咱們但願有些參數每次被加載時候不是一個固定的值,好比密鑰、服務端口等,在Spring Boot 的屬性配置文件中,能夠使用${random}配置來產生隨機的int值、long值或者string字符串,這樣咱們就能夠很容易的經過配置隨機生成屬性,好比:

#-隨機生成8080-8090內的隨機數

server.port=${random.int(8080,8090)}

#--------------------------

#-隨機生成字符串

org.drsoft.random=${random.value}

#-隨機生成int

org.drsoft.random.int=${random.int}

#-隨機生成long

org.drsoft.random.long=${random.long}

#-隨機生成10之內的int

org.drsoft.random.intRagne=${random.int(10)}

#-機生成 uuid

命令行參數

使用命令 java -jar 來啓動的方式,該命令除了啓動應用外,還能夠在命令行中指定應用的參數,好比 java - jar xxx.jar --server.port=8090 直接以命令行的方式設置服務端口屬性,在用命令行方式啓動 Spring Boot應用時,連續的兩個減號就是對application.properties 中的屬性進行賦值的標識

多環境配置

多環境的配置,各類項目構建工具或是框架的基本思路是一致的,經過配置多份不一樣環境的配置文件,在經過打包命令指定須要打包的內容以後進行區分打包,在Spring Boot 中,多環境配置的文件名須要知足application-{profile}.properties 的格式,其中{profile}對應環境標識,以下:

  • application-dev.properties:開發環境
  • application-test.properties:測試環境
  • application-prod.properties:生成環境

至於具體哪一個配置文件會被加載,須要在 application.properties 文件中經過spring.profiles.action 屬性來設置,其值對應配置文件中的{profile} 值。

加載順序

爲了可以更合理的重寫各屬性的值,其Spring Boot 使用了下面這種較爲特別的屬性加載順序:

  • 命令行中傳入的參數
  • SPRING_APPLICATION_JSON中的屬性,SPRING_APPLICATION_JSON 是以JSON格式配置在系統環境變量中的內容
  • java:comp/env 中的 JNDI 屬性
  • java 的系統屬性,能夠經過System.getProperties()獲取的內容
  • 操做系統的環境變量
  • 經過 random.* 配置的隨機屬性
  • 位於當前應用 Jar 包以外,針對不一樣{profile}環境的配置文件內容
  • 位於當前應用 Jar 包以內,針對不一樣{profile}環境的配置文件內容
  • 位於當前應用 Jar 包以外的 application.properties 配置內容
  • 位於當前應用 Jar 包以內的 application.properties 配置內容
  • @Configuration 註解修改的類,經過 @PropertySource 註解定義的屬性
  • 應用默認屬性,使用 SpringApplication.setDefaultProperties 定義的內容

能夠看到其中標黃的都是從應用Jar包以外讀取配置文件,因此,實現外部化配置的原理就是今後切入,爲其指定外部配置文件的加載位置來取代Jar包以內的配置內容。

相關文章
相關標籤/搜索