文章包含以下內容。
-
基本信息
-
容器配置
-
管理配置
-
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這樣的組件都是從中拿數據,你也可以輕易做一個後臺哦。
很多高危接口,開車注意安全。
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=)