Spring?Boot?根據(jù)配置決定服務(wù)(集群、單機(jī))是否使用某些主件的操作代碼
比如:在集群模式下,我想用 Nacos 組件,單機(jī)版不想用它。
server: name: VipSoft Server Dev port: 8193 cloud: nacos: discovery: server-addr: 127.0.0.1:8848 #注冊中心地址(集群用,號分隔) cluster-name: DEFAULT #可以通過集群名稱區(qū)分不同的項(xiàng)目 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:使用條件注解 + 配置開關(guān)
- 修改 application.yml 添加啟用開關(guān):
server: name: Telemetry Cloud Server Dev port: 8193 cloud: nacos: enabled: false # 添加這個(gè)開關(guān) 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相關(guān)配置)
- application-standalone.yml (單機(jī)版配置)
- application.yml 中激活不同配置:
spring: profiles: active: standalone # 或 nacos
- 將 Nacos 相關(guān)配置移到 application-nacos.yml 中
方案3:編程式條件加載(更靈活)
- 添加配置開關(guān):
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相關(guān)邏輯 } } }
最佳實(shí)踐建議:
推薦方案1或方案4:
- 如果只是簡單開關(guān),用方案1最簡單:
server: cloud: nacos: enabled: false
@Component @ConditionalOnProperty(name = "server.cloud.nacos.enabled", matchIfMissing = false) public class NettyServer { // ... }
- 如果需要更復(fù)雜的配置管理,用方案4更優(yōu)雅。
這樣你可以通過修改配置文件的 enabled
值來決定是否啟用Nacos相關(guān)功能,無需修改代碼。
到此這篇關(guān)于Spring Boot 根據(jù)配置決定服務(wù)(集群、單機(jī))是否使用某些主件的文章就介紹到這了,更多相關(guān)Spring Boot 根據(jù)配置決定服務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于JWT實(shí)現(xiàn)SSO單點(diǎn)登錄流程圖解
這篇文章主要介紹了基于JWT實(shí)現(xiàn)SSO單點(diǎn)登錄流程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07mybatis批量插入時(shí),有字段可能為null會報(bào)錯問題
這篇文章主要介紹了mybatis批量插入時(shí),有字段可能為null會報(bào)錯問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11Java實(shí)現(xiàn)經(jīng)典游戲黃金礦工的示例代碼
《黃金礦工》游戲是一個(gè)經(jīng)典的抓金子小游戲,它可以鍛煉人的反應(yīng)能力。本文將用Java實(shí)現(xiàn)這一經(jīng)典的游戲,感興趣的小伙伴可以了解一下2022-02-02SpringBoot連接MySql數(shù)據(jù)庫的原理及代碼示例
SpringBoot是一款流行的Java開發(fā)框架,它可以輕松地連接各種類型的數(shù)據(jù)庫,包括關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫,本文將介紹SpringBoot是如何連接數(shù)據(jù)庫的,包括其原理和代碼示例,需要的朋友可以參考下2023-07-07