Spring?Boot?根據(jù)配置決定服務(集群、單機)是否使用某些主件的操作代碼
更新時間:2025年04月18日 08:46:18 作者:VipSoft
這篇文章主要介紹了Spring?Boot根據(jù)配置決定服務(集群、單機)是否使用某些主件,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
比如:在集群模式下,我想用 Nacos 組件,單機版不想用它。
server: name: VipSoft Server Dev port: 8193 cloud: nacos: discovery: server-addr: 127.0.0.1:8848 #注冊中心地址(集群用,號分隔) cluster-name: DEFAULT #可以通過集群名稱區(qū)分不同的項目 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; } @Component public class XXXService { @Autowired private NacosUtil nacosUtil; }
解決文案
方案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 { // 原有代碼... } @Component public class XXXService { // 允許依賴不存在 @Autowired(required = false) private NacosUtil nacosUtil; }
方案2:使用 Profile 區(qū)分
- 創(chuàng)建不同環(huán)境的配置文件:
- 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
- 創(chuàng)建配置類:
@Configuration public class NettyConfig { @Bean @ConditionalOnProperty(name = "netty.mode", havingValue = "cloud") public NettyServer nettyServer() { return new NettyServer(); } }
方案4:使用 @ConfigurationProperties 更優(yōu)雅地管理配置
- 創(chuàng)建配置類:
@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更優(yōu)雅。
這樣你可以通過修改配置文件的 enabled
值來決定是否啟用Nacos相關功能,無需修改代碼。
到此這篇關于Spring Boot 根據(jù)配置決定服務(集群、單機)是否使用某些主件的文章就介紹到這了,更多相關Spring Boot 根據(jù)配置決定服務內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java實現(xiàn)經(jīng)典游戲黃金礦工的示例代碼
《黃金礦工》游戲是一個經(jīng)典的抓金子小游戲,它可以鍛煉人的反應能力。本文將用Java實現(xiàn)這一經(jīng)典的游戲,感興趣的小伙伴可以了解一下2022-02-02SpringBoot連接MySql數(shù)據(jù)庫的原理及代碼示例
SpringBoot是一款流行的Java開發(fā)框架,它可以輕松地連接各種類型的數(shù)據(jù)庫,包括關系型數(shù)據(jù)庫和非關系型數(shù)據(jù)庫,本文將介紹SpringBoot是如何連接數(shù)據(jù)庫的,包括其原理和代碼示例,需要的朋友可以參考下2023-07-07