【SpringCloud】配置:application.yml中都應該寫些啥?

文章包含以下內容。

  • 基本信息

  • 容器配置

  • 管理配置

  • Endpoint

  • Swagger配置

  • Eureka配置

  • Feign和Ribbon

  • 調用鏈

  • 通用配置

  • 連接池配置

  • Mybatis配置

基本信息
基本信息用來展示項目的版本、開發者等。可用來開發統一的管理後臺對項目進行控制。

info:
  businessSide: 研發部
  serviceName: ${artifactId}
  version: @version@
*   jdk-version: @java.version@
  spring-boot.version: @spring-boot.version@
  spring-cloud.version: @spring-cloud.version@
  author: 小姐姐

一般,通過訪問 /info,即可得到解釋後的JSON。

Tomcat配置
用來打印Server的Access日誌和運行日誌,同時比較重要的還有contextPath。良好的日誌格式是必要的,用來進行後續的分析和統計。

注意某些版本的basedir改成了file:.語法,直接寫.會報錯的。


server:
  port: 8888
  context-path: /
  tomcat:
    basedir: .
    accesslog:
      enabled: true
      directory: /export/logs/example/
      pattern: "%{X-Forwarded-For}i %a %{X-B3-TraceId}i %t %m %U %s %b %D"
      rename-on-rotate: true
      suffix: .log
      prefix: access
      rotate: true
      buffered: false
      file-date-format: yyyy-MM-dd
    uri-encoding: UTF-8

Undertow、Jetty的配置類似。

管理
線上要將 security開啓。另外 contextPath改成統一的更佳,我覺得/ops比較好,你也可以用。


management:
  security:
    enabled: false
  context-path: /ops

通過管理能夠拿到哪些信息呢?我這裏總結了一下,像Spring-admin這樣的組件都是從中拿數據,你也可以輕易做一個後臺哦。

【SpringCloud】配置:application.yml中都應該寫些啥?
很多高危接口,開車注意安全。

Endpoint


endpoints:
  shutdown:
    enabled: false
    sensitive: false
  jolokia:
    enabled: true

我們的jolokia就是在這裏開放的,很簡單的是不是?

shutdown接口非常有用,可以做一些類似隔離的功能。但我們更佳傾向於控制註冊中心去幹這些事,所以禁用。如果你開啓了,注意不要暴露在外網。

Swagger
Swagger作爲可視化的測試工具,也是項目溝通的橋樑,同時能作爲文檔使用,項目中都應該配備。

swagger:
  title: ${artifactId}
  version: @version@
  contact:
    name: 小姐姐
    email: [email protected]
  base-package: com.sayhiai.controller
  base-path: /**
  exclude-path: /error, /ops/**

Eureka配置
服務可能作爲提供者,也可能作爲調用者。所以client和instance都應該配備。其中,參數是調了優的,你需要了解其中的含義。建議參考本公衆號《SpringCloud服務的平滑上下線功能》。


eureka:
  client:
    register-with-eureka: true
    fetch-registry: false
    #eureka client獲取服務註冊狀態
    registry-fetch-interval-seconds: 5
    healthcheck:
      enabled: true
  instance:
    prefer-ip-address: true
    instance-id: ${spring.cloud.client.ipAddress}:${server.port}
    metadata-map:
      management.context-path: ${server.context-path}
    statusPageUrlPath: ${server.context-path}ops/info
    health-check-url-path: ${server.context-path}ops/health
    lease-expiration-duration-in-seconds: 15
    lease-renewal-interval-in-seconds: 5

Feign和Ribbon
Feign和Ribbon作爲底層,負責服務間通信。Ribbon的許多參數是公用的。爲了支持平滑上下線功能,合理的超時配置也是必須的。


feign:
  hystrix:
    enabled: trueribbon:
  ReadTimeout: 8000
  ConnectTimeout: 1000
  OkToRetryOnAllOperations: true
  MaxAutoRetriesNextServer: 2
  MaxAutoRetries: 0
  ServerListRefreshInterval: 3000
  retryableStatusCodes: 404,500

調用鏈
調用鏈應該是分佈式系統的必備功能了,否則會陷入問題的泥潭裏不能自拔。我比較喜歡jaeger,zipkin的集成也是類似的,opentracing都有通用的解決方案。


opentracing.jaeger.log-spans: trueopentracing.jaeger.udp-sender.host: localhost
opentracing.jaeger.udp-sender.port: 5775

通用配置
兩個比較重要的點提一下:

  • aop一定要開啓proxyTargetClass,很多功能要用,比如各種starter。

  • jmx一定開啓,開啓後就可以使用jolokia等工具將jmx轉成http,進而能夠使用telegraf等進行數據收集做監控圖。

spring:
application:
name: ${artifactId}
http:
encoding:
charset: UTF-8
force: true
enabled: true
profiles:
active: @profileActive@
aop:
proxyTargetClass: true
auto: true
jmx:
enabled: true














**數據庫配置**
一般Druid數據庫連接池已經成爲標配了。此數據庫連接池配置項有點多,酌情開啓。

spring:
datasource: type: com.alibaba.druid.pool.DruidDataSource
druid:
initial-size: 5
min-idle: 5
max-active: 200
max-wait: 10000
#test-while-idle: true
#validation-query: SELECT 1 FROM DUAL
test-on-borrow: false
test-on-return: false









配置間隔多久才進行一次檢測,檢測需要關閉的空閒連接,單位是毫秒

  time-between-eviction-runs-millis: 15000
  default-auto-commit: true
  # 配置一個連接在池中最小生存的時間,單位是毫秒
  min-evictable-idle-time-millis: 30000
  # 配置監控統計攔截的filters,去掉後監控界面sql無法統計,'wall'用於防火牆
  #filters: stat,wall,slf4j
  #有多個數據源時,配置公用監控數據
  use-global-data-source-stat: true
  filter:
    stat:
      enabled: false
      db-type: mysql
      log-slow-sql: true
      slow-sql-millis: 2
    slf4j:
      data-source-log-enabled: true
      data-source-logger-name: DRUID
      statement-executable-sql-log-enable: true
      statement-logger-name: DRUID

**MyBatis**
什麼?還在用ORM,那就MyBatis吧。或者,那麼多選擇,幹麼非要用SQL呢?

mybatis:
mapper-locations: classpath:sqlmap/Mapper.xml type-aliases-package: ${package}.entity
configuration: # 全局啓用或禁用延遲加載。當禁用時,所有關聯對象都會即時加載。
lazy-loading-enabled: false


使全局的映射器啓用或禁用緩存

cache-enabled: true
# 當啓用時,有延遲加載屬性的對象在被調用時將會完全加載任意屬性。否則,每種屬性將會按需要加載。
aggressive-lazy-loading: false
# 是否允許單條sql 返回多個數據集  (取決於驅動的兼容性) default:true
multiple-result-sets-enabled: true
# 是否可以使用列的別名 (取決於驅動的兼容性) default:true
use-column-label: true
# 允許JDBC 生成主鍵。需要驅動器支持。如果設爲了true,這個設置將強制使用被生成的主鍵,有一些驅動器不兼容不過仍然可以執行。  default:false
use-generated-keys: false
# 指定 MyBatis 如何自動映射 數據基表的列 NONE:不隱射 PARTIAL:部分  FULL:全部
auto-mapping-behavior: partial    # 這是默認的執行類型  (SIMPLE: 簡單; REUSE: 執行器可能重複使用prepared statements語句;BATCH: 執行器可以重複執行語句和批量更新)
default-executor-type: simple    # 使用駝峯命名法轉換字段。
map-underscore-to-camel-case: true
# 設置本地緩存範圍 session:就會有數據的共享  statement:語句範圍 (這樣就不會有數據的共享 ) defalut:session
local-cache-scope: session    # 設置但JDBC類型爲空時,某些驅動程序 要指定值,default:OTHER,插入空值時不需要指定類型
jdbc-type-for-null: 'null'


最後,配上一張簡圖,當系統成長,通用的模塊,都可以作爲通用配置放在application.yml裏。

![](https://s4.51cto.com/images/blog/202102/04/36e9db83f9ff0ff0c98bb681fc31fa12.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章