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

文章包含如下內容。java

  • 基本信息
  • 容器配置
  • 管理配置
  • Endpoint
  • Swagger配置
  • Eureka配置
  • Feign和Ribbon
  • 調用鏈
  • 通用配置
  • 鏈接池配置
  • Mybatis配置

基本信息

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

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。spring

Tomcat配置

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

注意某些版本的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
複製代碼

UndertowJetty的配置相似。緩存

管理

線上要將 security開啓。另外 contextPath改爲統一的更佳,我以爲/ops比較好,你也能夠用。tomcat

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

不少高危接口,開車注意安全。bash

Endpoint (如何描述,囧)

endpoints:
  shutdown:
    enabled: false
    sensitive: false
  jolokia:
    enabled: true
複製代碼

咱們的jolokia就是在這裏開放的,很簡單的是否是?session

shutdown接口很是有用,能夠作一些相似隔離的功能。但咱們更佳傾向於控制註冊中心去幹這些事,因此禁用。若是你開啓了,注意不要暴露在外網。

Swagger

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

swagger:
  title: ${artifactId}
  version: @version@
  contact:
    name: 小姐姐
    email: xjj@sayhiai.com
  base-package: com.sayhiai.controller
  base-path: /**
  exclude-path: /error, /ops/**
複製代碼

Eureka配置

服務可能做爲提供者,也可能做爲調用者。因此clientinstance都應該配備。其中,參數是調了優的,你須要瞭解其中的含義。建議參考本公衆號《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

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

feign:
  hystrix:
    enabled: true
ribbon:
  ReadTimeout: 8000
  ConnectTimeout: 1000
  OkToRetryOnAllOperations: true
  MaxAutoRetriesNextServer: 2
  MaxAutoRetries: 0
  ServerListRefreshInterval: 3000
  retryableStatusCodes: 404,500
複製代碼

#調用鏈

調用鏈應該是分佈式系統的必備功能了,不然會陷入問題的泥潭裏不能自拔。我比較喜歡jaegerzipkin的集成也是相似的,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裏。

相關文章
相關標籤/搜索