Spring Boot 根据配置决定服务(集群、单机)是否使用某些主件
比如:在集群模式下,我想用 Nacos 组件,单机版不想用它。
server:
name: VipSoft Server Dev
port: 8193
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #注册中心地址(集群用,号分隔)
cluster-name: DEFAULT #可以通过集群名称区分不同的项目
server-name: netty-service
group-name: NETTY_GROUP
@Component
public class NettyServer {
private static final Logger logger = LoggerFactory.getLogger(LoggerConfig.NETTY_LOGGER);
@Value("${server.cloud.nacos.discovery.server-addr}")
private String nacosServer;
@Value("${server.cloud.nacos.discovery.server-name}")
private String serviceName;
@Value("${server.cloud.nacos.discovery.group-name}")
private String groupName;
}
解决文案
方案1:使用条件注解 + 配置开关
- 修改 application.yml 添加启用开关:
server:
name: Telemetry Cloud Server Dev
port: 8193
cloud:
nacos:
enabled: false # 添加这个开关
discovery:
server-addr: 127.0.0.1:8848
cluster-name: DEFAULT
server-name: netty-service
group-name: NETTY_GROUP
- 修改 NettyServer 类:
@Component
@ConditionalOnProperty(name = "server.cloud.nacos.enabled", havingValue = "true")
public class NettyServer {
// 原有代码...
}
方案2:使用 Profile 区分
- 创建不同环境的配置文件:
- application.yml (公共配置)
- application-nacos.yml (Nacos相关配置)
- application-standalone.yml (单机版配置)
- application.yml 中激活不同配置:
spring:
profiles:
active: standalone # 或 nacos
- 将 Nacos 相关配置移到 application-nacos.yml 中
方案3:编程式条件加载(更灵活)
- 添加配置开关:
netty:
mode: standalone # 或 cloud
- 创建配置类:
@Configuration
public class NettyConfig {
@Bean
@ConditionalOnProperty(name = "netty.mode", havingValue = "cloud")
public NettyServer nettyServer() {
return new NettyServer();
}
}
方案4:使用 @ConfigurationProperties 更优雅地管理配置
- 创建配置类:
@ConfigurationProperties(prefix = "server.cloud.nacos.discovery")
public class NacosProperties {
private boolean enabled;
private String serverAddr;
private String clusterName;
private String serverName;
private String groupName;
// getters and setters
}
- 修改 NettyServer:
@Component
public class NettyServer {
private final NacosProperties nacosProperties;
public NettyServer(NacosProperties nacosProperties) {
this.nacosProperties = nacosProperties;
if(nacosProperties.isEnabled()) {
// 初始化Nacos相关逻辑
}
}
}
最佳实践建议:
推荐方案1或方案4:
- 如果只是简单开关,用方案1最简单:
server:
cloud:
nacos:
enabled: false
@Component
@ConditionalOnProperty(name = "server.cloud.nacos.enabled", matchIfMissing = false)
public class NettyServer {
// ...
}
- 如果需要更复杂的配置管理,用方案4更优雅。
这样你可以通过修改配置文件的 enabled 值来决定是否启用Nacos相关功能,无需修改代码。
Spring Boot 根据配置决定服务(集群、单机)是否使用某些主件的更多相关文章
- Spring Cloud Config 配置高可用集群
详细参考:<Sprin Cloud 与 Docker 微服务架构实战>p163-9.10节 spring cloud config 与 eureka 配合使用 我就不写了,请参见本书章节.
- Spring Cloud(Dalston.SR5)--Zuul 网关-微服务集群
通过 url 映射的方式来实现 zuul 的转发有局限性,比如每增加一个服务就需要配置一条内容,另外后端的服务如果是动态来提供,就不能采用这种方案来配置了.实际上在实现微服务架构时,服务名与服务实例地 ...
- Spring Cloud Turbine微服务集群实时监控
本文代码下载地址: https://gitlab.com/mySpringCloud/turbine SpringBoot版本:1.5.9.RELEASE (稳定版) SpringCloud版本:Ed ...
- Spring boot 零配置开发微服务
2018年12月29日星期六 体验Spring boot 零配置开发微服务 1.为什么要用Spring boot? 1.1 简单方便.配置少.整合了大多数框架 1.2 适用于微服务搭建,搭建的微服务 ...
- Springboot监控之二:Spring Boot Admin对Springboot服务进行监控
概述 Spring Boot 监控核心是 spring-boot-starter-actuator 依赖,增加依赖后, Spring Boot 会默认配置一些通用的监控,比如 jvm 监控.类加载.健 ...
- Eclipse启动SpringCloud微服务集群的方法
1.说明 下面这篇文章介绍了Eureka Server集群的启动方法, SpringCloud创建Eureka模块集群 是通过jar包启动时指定配置文件的方式实现的. 现在只有Eureka Serve ...
- Java Spring mvc 操作 Redis 及 Redis 集群
本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5941953.html 关于 Redis 集群搭建可以参考我的另一篇文章 Redis集群搭建与简单使用 R ...
- Dubbo服务集群、服务启动依赖检查
一.什么叫Dubbo服务集群 指把同一个服务部署到多台机器,然后通过Dubbo服务集群的容错配置实现一台机器的服务挂掉之后自动切换到另外的一台机器 二.Dubbo服务集群容错配置--集群容错模式 标签 ...
- 基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)
基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势) 前言 前几天对Apollo配置中心的demo进行一个部署试用,现公司已决定使用,这两天进行分布式部署的时候 ...
- Spring Cloud第八篇 | Hystrix集群监控Turbine
本文是Spring Cloud专栏的第八篇文章,了解前七篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Clo ...
随机推荐
- 解决yarn打包时出现“FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory”的问题
1.问题描述 我们在使用yarn命令对项目进行打包时,可能会出现如下的错误信息 "FATAL ERROR: Reached heap limit Allocation failed - Ja ...
- 【忍者算法】从图书馆找书到矩阵搜索:探索二维矩阵中的高效搜索|LeetCode第240题 搜索二维矩阵 II
从图书馆找书到矩阵搜索:探索二维矩阵中的高效搜索 生活中的搜索策略 想象你在一个大型图书馆里找书.这个图书馆的书架是按照两个维度排列的:每个书架从左到右按书名字母顺序排列,从上到下的书架则按照出版年份 ...
- flutter-解决长按TextField出现英文(复制粘贴)问题
第一步 引入依赖 dependencies: flutter: sdk: flutter flutter_localizations: sdk: flutter 第二步 在main.dart中添加代码 ...
- 一种将历史地图坐标配准到GIS中的方法
经常我们看到历史地图影像,比如谭图里面的各个历史朝代的大地图, 然后我们希望利用这个影像作为图层或者叫底图,然后在GIS软件上编辑一些矢量文件, 从而产生的地图矢量文件具有真实的经纬度坐标,不是单单的 ...
- AD 测试点覆盖率的统计
在用Altium Designer软件设计PCB时,有时会有统计这个工程的测试点覆盖率需求.在AD 中有2种类型的测试点:Fabrication testppoint(用于PCB的下线电气测试)和As ...
- 无线路由器dBi越大越好吗?
无线路由器dBi越大越好吗? 目前,常见的无线路由器,通过查看参数可知,大多为3dBi.5dBi或7dBi,对于用户来说,这个数值到底是越大越好,还是越小越好呢?对于这个问题,其实通过下面这张天线增益 ...
- 在Unity中玩转表达式树:解锁游戏逻辑的动态魔法
html { overflow-x: initial !important } :root { --bg-color: #ffffff; --text-color: #333333; --select ...
- 【Unity】光照解决方案笔记
[Unity]光照解决方案笔记 https://docs.unity.cn/cn/2022.3/Manual/BestPracticeLightingPipelines.html 确定对象显示效果的三 ...
- MySQL - mysql 面试题
事务的四个特点是什么?他们的实现原理是什么? 事务的四个特点是ACID,即原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability). ...
- Flume - [05] Hbase sink
一.概述 此接收器将数据写入Hbase.Hbase配置是从类路径中遇到的第一个Hbase-site.xml获取的.由配置指定的实现 HbaseEventSerializer 的类用于将事件转换为 ...