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 ...
随机推荐
- JavaScript数组(包括上一笔记都是ECMAScript对象),BOM对象,DOM对象,html DOM Enent(事件)
JavaScript数组(包括上一笔记都是ECMAScript对象),BOM对象,DOM对象,html DOM Enent(事件) 1.Arrary; var ret = new Arrary(1,2 ...
- TypeScript 中的 type 和 interface:你真的了解它们的不同吗?
如果你有写过 Vue3 的项目,那么对 TypeScript 肯定不会陌生.不管是公司新项目技术选型还是个人学习开发新的前端项目,Vue3 + TypeScript 已经成为首选技术方案之一 在 Ty ...
- 网口CE超标了~
前不久遇到一个网口传导测试超标的问题,今天在此分享下,希望各位能有所收获~ 背景 在对量产产品EMC抽检时,发现网口CE测试在537KHz处超标2.84dB 因为是网口传导测试,所以首先检查与网口相关 ...
- autohue.js:让你的图片和背景融为一体,绝了!
需求 先来看这样一个场景,拿一个网站举例 这里有一个常见的网站 banner 图容器,大小为为 1910*560 ,看起来背景图完美的充满了宽度,但是图片原始大小时,却是: 它的宽度只有 1440 , ...
- VSCode 如何选中包含某个字母的所有行
- 微信小程序如何访问带有Token安全认证的API
展开微信小程序访问Token安全验证的API接口API//添加一个自定义过滤器using Newtonsoft.Json;using System;using System.Collections.G ...
- Nginx - [02] 安装部署&配置
官网下载地址:http://nginx.org/en/download.html 001 || 安装[windows] 解压之后,在命令提示符窗口启动nginx.exe 在浏览器访问80端口:loca ...
- 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
从 Chrome 125 开始,支持了一个全新的 CSS 特性 - Anchor Positioning,翻译过来即是锚点定位. 在之前的文章中,我们较为系统的讲述了这个新特性的使用,感兴趣的可以翻开 ...
- Win10 + Ubuntu 19.10 双系统自动连接相同蓝牙设备
原文地址:Win10 + Ubuntu 19.10 双系统自动连接相同蓝牙设备 0x00 环境 OS 1: Windows 10 专业版 1909 OS 2: Ubuntu 19.10 蓝牙设备: 小 ...
- 写了个 CasaOS/ZimaOS 内网穿透的远程访问插件(不是 frp 或者 nps),欢迎大家测试使用
插件正在提交,应该过几天就会进入市场了. 插件访问效果大概如下: casaOS 远程界面 如果大家想先行测试可以手动下载 pr 的文件进行测试. 使用 插件会提供一个二维码,使用OpenIoThub ...