1. 程式人生 > >管理與技術之規範spring-boot配置提高運維與管理效率

管理與技術之規範spring-boot配置提高運維與管理效率

會用與靈活的用好之間是妙之巔豪,失之千里,小細節大管理。管理沒有大小之分, 很小的細節管理可能會很大在個個方面提升效率,降低成本。本章節是鳥菜啊在實踐靈活用好spring-boot配置的案例,只是進行一次比較簡單有效的規範,很大程度上提高的管理,運維與合作效率。

配置管理是整個開發流程非常重要的一個環節。目前大家都在使用一個開發與運維神奇spring boot。接下來深入講解spring boot

1.瞭解spring boot 配置體系

spring boot 啟動會在一些特定目錄下讀取一些特定名字的特性定字尾的檔案

1. 讀取那些後最的檔案每種檔案的優缺點

spring boot 會讀取那些特定字尾檔案。xml,yml,properties。至於xml就不對比了,有已定的有點,就是太重。已經是被遺棄的方案。舉一個spring-redis的列子對比下

properties

spring.redis.database=3
spring.redis.host=192.168.0.64
spring.mysql.host=192.168.0.64
spring.mysql.password:=
spring.redis.password:=
spring.redis.port:=6379
spring.redis.jedis.pool.max-idle=48
spring.redis.jedis.pool.max-idle.min-idle=0
spring.redis.jedis.pool.max-idle.max-active=24
spring.redis.jedis.pool.max-idle.max-wait=-1

yml

spring:
  redis:
      database: 3
      host: 192.168.0.1
      password: 111111
      port: 6379
      jedis:
        pool:
          max-idle: 48
          min-idle: 0
          max-active: 24
          max-wait: -1

| | 可讀性 | 操作性 | 複雜度 | 出錯性 | 規範 |維護成本|IDE支援 | ------ | ------| ------ | |properties| 低 | 低 | 中 | 高 | 無 | 中 | 低 |yml | 高 | 高 | 低 | 中 | 有,沒有實施 | 低 | 加強中 |xml | 高 | 不好說 | 高 | 低 | 有,強行 | 高 | 支援全面

從上面的分析得到 yml是最優的。yml也支援properties風格,請不要使用。至於為什麼請看上面,在properties程式碼中加入了其他的配置,容易出錯,難發現。但是properties沒有問題的。

xml 唯一的有點就是有規範致使出錯低。那個屬性少了,配置錯誤了。ide都可以檢測出來。但是在目前分散式低配置的環境下,這個作用可以無用,所以沒有推薦基本沒有人使用,但是spring還是做xml進行支援了。

2. 自動讀取那些名字的檔案

spirng boot 會自動讀取特定目錄下的

  1. bootstrap.yml
  2. application.yml
  3. 讀取某種配置指定application-?.yml的檔案

基於bootstrap.yml的配置

spring:
   profiles:
     active: development

基於啟動引數的配置

java -jar -Dspring.profiles.active=development lqyspringboot-0.0.1-SNAPSHOT.jar

啟動之後會在特定目錄讀取application-development.yml

資料覆蓋性 bootstrap.yml

spring:
  redis:
      database: 1

application.yml

spring:
  redis:
      database: 2

application-development.yml

spring:
  redis:
      database: 3

最後spring-redis使用application-development.yml中的配置,連結redis的第三個庫。

  1. 可知覆蓋循序是如果存在application-?.yml 覆蓋application.yml與bootstrap.yml
  2. application.yml覆蓋bootstrap.yml
3. 讀取那些目錄下的檔案

在jar或者專案中的一下目錄

  1. 讀取src目錄下的配置檔案。在ide中的src/resources
  2. 讀取src/config目錄下配置檔案。在die中的src/resources/config

執行目錄讀取

  1. 執行目錄中的檔案
  2. 執行目錄的config目錄下檔案

本小節使用的圖片是 luzle 部落格裡面的

總結

  1. 開發的時候不會把配置檔案放到config目錄下,因為啟動檔案本來就不多
  2. 執行的時候,配置檔案放到同級的config目錄下,這樣好管理。不讓讀取jar裡面的檔案,每次打包都要修改配置,的確很麻煩。讀取config目錄相對比較靈活

2. 鳥菜啊如何規範spring boot的

  1. 配置的內容很多,如何管理

對配置的內容進行分析,會發現一下狀態

  1. 永遠不會變
  2. 每個環境都需要變化
  3. 效能調優可能發生改變

這是application.yml內容

server:
  port: 8006
spring:
  redis:
      host: xxxxxx
      password: xxxxxx
      jedis:
        pool:
          max-idle: 200
          min-idle: 0
          max-active: 24
          max-wait: -1


#mybatis相關配置
mybatis:
    mapperLocations: "classpath:mapper/*Mapper.xml"
    typeAliasesPackage: "com.entity"
    checkConfig-location : false
    configuration:
        useGeneratedKeys: true
        mapUnderscoreToCamelCase: true

#開啟mysql的SQL日誌列印        
logging:
  level:
      com.jiatui.im.feeds.domain.mapper: DEBUG

#mybatis分頁外掛
pagehelper:
    helperDialect: mysql
    reasonable: true
    supportMethodsArguments: true
    params: count=countSql

鳥菜啊做一下處理,把application.yml的內容拆分到兩個檔案bootstrap.yml與application.yml 把不變的配置放到bootstrap.yml裡面

server:
  port: 8006
spring:
  redis:
      jedis:
        pool:
          max-idle: 200
          min-idle: 0
          max-active: 24
          max-wait: -1


#mybatis相關配置
mybatis:
    mapperLocations: "classpath:mapper/*Mapper.xml"
    typeAliasesPackage: "com.jiatui.im.feeds.domain.entity"
    checkConfig-location : false
    configuration:
        useGeneratedKeys: true
        mapUnderscoreToCamelCase: true

#開啟mysql的SQL日誌列印        
logging:
  level:
      com.jiatui.im.feeds.domain.mapper: DEBUG

#mybatis分頁外掛
pagehelper:
    helperDialect: mysql
    reasonable: true
    supportMethodsArguments: true
    params: count=countSql

把依據環境變化的配置放到application.yml

spring:
  redis:
      host: xxxx
      password: xxxxx
      port: 6388
  1. 規範配置規則

這些配置與那些人又關聯。開發,管理,運維。

開發與運維最大的仇恨在於配置吧。開發設定配置,運維根本就不知道什麼時候,不小心就操作失誤。運維沒有辦法只能讓運維引數給開發,開發配置好push到git然後運維打包。 大概流程如下

每次部署十分麻煩,耗時,可能通宵部署。參與人員十分難受。

鳥菜啊是這樣做的


spring:
  redis:
  	  // 請修改這處配置....獨立的服務.....
      host: xxxx
      password: xxxxx
      port: 6388