文章包含如下內容。java
基本信息用來展現項目的版本、開發者等。可用來開發統一的管理後臺對項目進行控制。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
用來打印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
複製代碼
Undertow
、Jetty
的配置相似。緩存
線上要將 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
endpoints:
shutdown:
enabled: false
sensitive: false
jolokia:
enabled: true
複製代碼
咱們的jolokia就是在這裏開放的,很簡單的是否是?session
shutdown接口很是有用,能夠作一些相似隔離
的功能。但咱們更佳傾向於控制註冊中心去幹這些事,因此禁用。若是你開啓了,注意不要暴露在外網。
Swagger做爲可視化的測試工具,也是項目溝通的橋樑,同時能做爲文檔使用,項目中都應該配備。
swagger:
title: ${artifactId}
version: @version@
contact:
name: 小姐姐
email: xjj@sayhiai.com
base-package: com.sayhiai.controller
base-path: /**
exclude-path: /error, /ops/**
複製代碼
服務可能做爲提供者,也可能做爲調用者。因此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
做爲底層,負責服務間通訊。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
複製代碼
兩個比較重要的點提一下:
proxyTargetClass
,不少功能要用,好比各類starter
。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
複製代碼
什麼?還在用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裏。