比如:在集群模式下,我想用 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:使用条件注解 + 配置开关

  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
  1. 修改 NettyServer 类:
@Component
@ConditionalOnProperty(name = "server.cloud.nacos.enabled", havingValue = "true")
public class NettyServer {
// 原有代码...
}

方案2:使用 Profile 区分

  1. 创建不同环境的配置文件:
  • application.yml (公共配置)
  • application-nacos.yml (Nacos相关配置)
  • application-standalone.yml (单机版配置)
  1. application.yml 中激活不同配置:
spring:
profiles:
active: standalone # 或 nacos
  1. 将 Nacos 相关配置移到 application-nacos.yml 中

方案3:编程式条件加载(更灵活)

  1. 添加配置开关:
netty:
mode: standalone # 或 cloud
  1. 创建配置类:
@Configuration
public class NettyConfig { @Bean
@ConditionalOnProperty(name = "netty.mode", havingValue = "cloud")
public NettyServer nettyServer() {
return new NettyServer();
}
}

方案4:使用 @ConfigurationProperties 更优雅地管理配置

  1. 创建配置类:
@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
}
  1. 修改 NettyServer:
@Component
public class NettyServer {
private final NacosProperties nacosProperties; public NettyServer(NacosProperties nacosProperties) {
this.nacosProperties = nacosProperties;
if(nacosProperties.isEnabled()) {
// 初始化Nacos相关逻辑
}
}
}

最佳实践建议:

推荐方案1或方案4:

  1. 如果只是简单开关,用方案1最简单:
server:
cloud:
nacos:
enabled: false
@Component
@ConditionalOnProperty(name = "server.cloud.nacos.enabled", matchIfMissing = false)
public class NettyServer {
// ...
}
  1. 如果需要更复杂的配置管理,用方案4更优雅。

这样你可以通过修改配置文件的 enabled 值来决定是否启用Nacos相关功能,无需修改代码。

Spring Boot 根据配置决定服务(集群、单机)是否使用某些主件的更多相关文章

  1. Spring Cloud Config 配置高可用集群

    详细参考:<Sprin Cloud 与 Docker 微服务架构实战>p163-9.10节 spring cloud config 与 eureka 配合使用 我就不写了,请参见本书章节.

  2. Spring Cloud(Dalston.SR5)--Zuul 网关-微服务集群

    通过 url 映射的方式来实现 zuul 的转发有局限性,比如每增加一个服务就需要配置一条内容,另外后端的服务如果是动态来提供,就不能采用这种方案来配置了.实际上在实现微服务架构时,服务名与服务实例地 ...

  3. Spring Cloud Turbine微服务集群实时监控

    本文代码下载地址: https://gitlab.com/mySpringCloud/turbine SpringBoot版本:1.5.9.RELEASE (稳定版) SpringCloud版本:Ed ...

  4. Spring boot 零配置开发微服务

    2018年12月29日星期六 体验Spring boot 零配置开发微服务 1.为什么要用Spring  boot? 1.1 简单方便.配置少.整合了大多数框架 1.2 适用于微服务搭建,搭建的微服务 ...

  5. Springboot监控之二:Spring Boot Admin对Springboot服务进行监控

    概述 Spring Boot 监控核心是 spring-boot-starter-actuator 依赖,增加依赖后, Spring Boot 会默认配置一些通用的监控,比如 jvm 监控.类加载.健 ...

  6. Eclipse启动SpringCloud微服务集群的方法

    1.说明 下面这篇文章介绍了Eureka Server集群的启动方法, SpringCloud创建Eureka模块集群 是通过jar包启动时指定配置文件的方式实现的. 现在只有Eureka Serve ...

  7. Java Spring mvc 操作 Redis 及 Redis 集群

    本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5941953.html 关于 Redis 集群搭建可以参考我的另一篇文章 Redis集群搭建与简单使用 R ...

  8. Dubbo服务集群、服务启动依赖检查

    一.什么叫Dubbo服务集群 指把同一个服务部署到多台机器,然后通过Dubbo服务集群的容错配置实现一台机器的服务挂掉之后自动切换到另外的一台机器 二.Dubbo服务集群容错配置--集群容错模式 标签 ...

  9. 基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)

    基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)   前言 前几天对Apollo配置中心的demo进行一个部署试用,现公司已决定使用,这两天进行分布式部署的时候 ...

  10. Spring Cloud第八篇 | Hystrix集群监控Turbine

    ​ 本文是Spring Cloud专栏的第八篇文章,了解前七篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Clo ...

随机推荐

  1. Linux基础:更改shell环境

  2. Object类中toString()的使用

    /* * Object类中toString()的使用: * * 1. 当我们输出一个对象的引用时,实际上就是调用当前对象的toString() * * 2. Object类中toString()的定义 ...

  3. Jenkins插件:Publish over SSH

    Jenkins插件:Publish over SSH Jenkins作为一个开源的持续集成和交付工具,通过插件扩展可以实现各种功能.其中,Publish over SSH插件是Jenkins的一个常用 ...

  4. Python介绍以及应用场景

    Python介绍以及应用场景 Python简介 ​ Python,作为一种解释型.面向对象的高级编程语言,自1989年圣诞节期间由荷兰计算机科学家Guido van Rossum创造以来,已经取得了举 ...

  5. Codeforces 1536B Prinzessin der Verurteilung 题解 [ 紫 ] [ 后缀自动机 ] [ 动态规划 ] [ 拓扑排序 ]

    Prinzessin der Verurteilung:最短未出现字符串的板子. 思路 考虑在 SAM 上 dp,定义 \(dp_i\) 表示从 \(i\) 节点走到 NULL 节点所花费的最少步数. ...

  6. Hetao P1156 最大战力 题解 [ 绿 ][ 二分 ][ 最大子段和 ]

    最大战力 Vjudge 原题 题解 形式化题意 给定两个数组 \(a[n]\) 和 \(b[n]\) ,需要在数组 \(b\) 中选择一个区间 \(b[l,r]\) ,替换掉区间 \(a[l,r]\) ...

  7. FreeSql学习笔记——5.删除

    前言   对于FreeSql来说,删除的支持并不强大,只有在Where条件不为空的时候才执行,否则返回0或默认值,不执行删除操作:     语法   fsql.Delete<Class>( ...

  8. Java 加密和解密

    在 Java 中,加密和解密通常通过 Java Cryptography Architecture (JCA) 和 Java Cryptography Extension (JCE) 实现.以下是常见 ...

  9. N-gram基本原理

    N-gram模型是一种语言模型(Language Model,LM),语言模型是一个基于概率的判别模型,它的输入是一句话(单词的顺序序列),输出是这句话的概率,即这些单词的联合概率(joint pro ...

  10. Docker - 部署zyplayer_doc团队协作文档

    原文链接:https://mp.weixin.qq.com/s/ew3O0EKLo8KoOMkpT-IePw 一.介绍   zyplayer-doc是一款适合企业和个人使用的WIKI知识库管理工具,提 ...