【SpringCloud】配置:application.yml中都應該寫些啥?
【SpringCloud】配置:application.yml中都應該寫些啥?
文章包含以下內容。
基本資訊
基本資訊用來展示專案的版本、開發者等。可用來開發統一的管理後臺對專案進行控制。
info: businessSide: 研發部 serviceName: ${artifactId} version: @version@ jdk-version: @java.version@ spring-boot.version: @spring-boot.version@ spring-cloud.version: @spring-cloud.version@ author: 小姐姐
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這樣的元件都是從中拿資料,你也可以輕易做一個後臺哦。
路徑 | 內容 |
---|---|
/ops/jolokia/list jolokia | 暴露的介面 |
/ops/info | 輸出專案基本資訊 |
ops/health | 輸出健康資訊 |
/ops/autoconfig | 輸出自動配置的資訊 |
/ops/configprops | 敏感資訊,所以一定要關閉外網的訪問 |
/ops/beans Spring | 中都有哪些Bean,僅用於除錯 |
/ops/dump | JVM dump資訊,比如執行緒彙總等 |
/ops/env | 啟動環境 |
/ops/mappings | 所有URL對映 |
/ops/metrics | 監控資料,報表使用 |
/ops/trace | 最近的訪問trace |
很多高危介面,開車注意安全。
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: true ribbon: ReadTimeout: 8000 ConnectTimeout: 1000 OkToRetryOnAllOperations: true MaxAutoRetriesNextServer: 2 MaxAutoRetries: 0 ServerListRefreshInterval: 3000 retryableStatusCodes: 404,500
呼叫鏈
呼叫鏈應該是分散式系統的必備功能了,否則會陷入問題的泥潭裡不能自拔。我比較喜歡 jaeger
, zipkin
的整合也是類似的, opentracing
都有通用的解決方案。
opentracing.jaeger.log-spans: true opentracing.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裡。

訂閱微信公眾號,小姐姐,教你玩架構~