「SpringCloud」配置:application.yml中都应该写些啥?
bigegpt 2024-10-20 04:27 2 浏览
原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。
文章包含以下内容。
- 基本信息
- 容器配置
- 管理配置
- 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这样的组件都是从中拿数据,你也可以轻易做一个后台哦。
路径内容/ops/jolokia/list jolokia暴露的接口/ops/info输出项目基本信息ops/health输出健康信息/ops/autoconfig输出自动配置的信息/ops/configprops敏感信息,所以一定要关闭外网的访问/ops/beans Spring中都有哪些Bean,仅用于调试/ops/dumpJVM 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: xjj@sayhiai.com 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里。
?
作者简介:**小姐姐味道** (xjjdog),一个不允许程序员走弯路的公众号。聚焦基础架构和Linux。十年架构,日百亿流量,与你探讨高并发世界,给你不一样的味道。我的个人微信xjjdog0,欢迎添加好友,?进一步交流。
相关推荐
- Java 泛型大揭秘:类型参数、通配符与最佳实践
-
引言在编程世界中,代码的可重用性和可维护性是至关重要的。为了实现这些目标,Java5引入了一种名为泛型(Generics)的强大功能。本文将详细介绍Java泛型的概念、优势和局限性,以及如何在...
- K8s 的标签与选择器:流畅运维的秘诀
-
在Kubernetes的世界里,**标签(Label)和选择器(Selector)**并不是最炫酷的技术,但却是贯穿整个集群管理与运维流程的核心机制。正是它们让复杂的资源调度、查询、自动化运维变得...
- 哈希Hash算法:原理、应用(哈希算法 知乎)
-
原作者:Linux教程,原文地址:「链接」什么是哈希算法?哈希算法(HashAlgorithm),又称为散列算法或杂凑算法,是一种将任意长度的数据输入转换为固定长度输出值的数学函数。其输出结果通常被...
- C#学习:基于LLM的简历评估程序(c# 简历)
-
前言在pocketflow的例子中看到了一个基于LLM的简历评估程序的例子,感觉还挺好玩的,为了练习一下C#,我最近使用C#重写了一个。准备不同的简历:image-20250528183949844查...
- 55顺位,砍41+14+3!季后赛也成得分王,难道他也是一名球星?
-
雷霆队最不可思议的新星:一个55号秀的疯狂逆袭!你是不是也觉得NBA最底层的55号秀,就只能当饮水机管理员?今年的55号秀阿龙·威金斯恐怕要打破你的认知了!常规赛阶段,这位二轮秀就像开了窍的天才,直接...
- 5分钟读懂C#字典对象(c# 字典获取值)
-
什么是字典对象在C#中,使用Dictionary类来管理由键值对组成的集合,这类集合被称为字典。字典最大的特点就是能够根据键来快速查找集合中的值,其键的定义不能重复,具有唯一性,相当于数组索引值,字典...
- c#窗体传值(c# 跨窗体传递数据)
-
在WinForm编程中我们经常需要进行俩个窗体间的传值。下面我给出了两种方法,来实现传值一、在输入数据的界面中定义一个属性,供接受数据的窗体使用1、子窗体usingSystem;usingSyst...
- C#入门篇章—委托(c#委托的理解)
-
C#委托1.委托的定义和使用委托的作用:如果要把方法作为函数来进行传递的话,就要用到委托。委托是一个类型,这个类型可以赋值一个方法的引用。C#的委托通过delegate关键字来声明。声明委托的...
- C#.NET in、out、ref详解(c#.net framework)
-
简介在C#中,in、ref和out是用于修改方法参数传递方式的关键字,它们决定了参数是按值传递还是按引用传递,以及参数是否必须在传递前初始化。基本语义对比修饰符传递方式可读写性必须初始化调用...
- C#广义表(广义表headtail)
-
在C#中,广义表(GeneralizedList)是一种特殊的数据结构,它是线性表的推广。广义表可以包含单个元素(称为原子),也可以包含另一个广义表(称为子表)。以下是一个简单的C#广义表示例代...
- 「C#.NET 拾遗补漏」04:你必须知道的反射
-
阅读本文大概需要3分钟。通常,反射用于动态获取对象的类型、属性和方法等信息。今天带你玩转反射,来汇总一下反射的各种常见操作,捡漏看看有没有你不知道的。获取类型的成员Type类的GetMembe...
- C#启动外部程序的问题(c#怎么启动)
-
IT&OT的深度融合是智能制造的基石。本公众号将聚焦于PLC编程与上位机开发。除理论知识外,也会结合我们团队在开发过程中遇到的具体问题介绍一些项目经验。在使用C#开发上位机时,有时会需要启动外部的一些...
- 全网最狠C#面试拷问:这20道题没答出来,别说你懂.NET!
-
在竞争激烈的C#开发岗位求职过程中,面试是必经的一道关卡。而一场高质量的面试,不仅能筛选出真正掌握C#和.NET技术精髓的人才,也能让求职者对自身技术水平有更清晰的认知。今天,就为大家精心准备了20道...
- C#匿名方法(c#匿名方法与匿名类)
-
C#中的匿名方法是一种没有名称只有主体的方法,它提供了一种传递代码块作为委托参数的技术。以下是关于C#匿名方法的一些重要特点和用法:特点省略参数列表:使用匿名方法可省略参数列表,这意味着匿名方法...
- C# Windows窗体(.Net Framework)知识总结
-
Windows窗体可大致分为Form窗体和MDI窗体,Form窗体没什么好细说的,知识点总结都在思维导图里面了,下文将围绕MDI窗体来讲述。MDI(MultipleDocumentInterfac...
- 一周热门
- 最近发表
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- logstashinput (65)
- hadoop端口 (65)
- vue阻止冒泡 (67)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)