springcloud本地服务不注册到注册中心的解决方案
开发人员本地的服务如果注册到服务器的注册中心,服务器上的服务如果调用到开发本地的服务会调用不通,影响大家的开发效率。
以往为了不把本地服务注册到注册中心,会采用以下几种处理方式:
1、修改服务名,例如:将user-service修改为user-service-double,这样别的服务就不会调用到开发人员本地注册上去的服务了
2、修改是否注册到注册中心的配置参数为false:
-Dspring.cloud.service-registry.auto-registration.enabled=false
第一种方案容易出现把修改后的service误提交到git的情况,导致测试、生产注册的服务名错误
第二种方案需要每个开发同学都手动到IDE配置一个启动参数,开发人员过多(100+)不能保证每个同学都执行到位
新方案:服务启动时判断操作系统类型,如果是Linux则注册服务,如果不是则不注册(本地服务都是windows、mac系统)将Processor处理类放入基础包中,这样每个服务都引用到,不需要每个开发同学都去处理本地服务不注册问题。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.annotation.Order;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MapPropertySource;
import org.springframework.util.StringUtils;
import java.util.HashMap;
import java.util.Map;
/**
* 在spring上下文构建之前可以设置一些系统配置
* 可以在创建应用程序上下文之前,添加或者修改环境配置。
*
* @author double
* @Date 2022/1/26 11:43 上午
*/
@Order(ConfigDataEnvironmentPostProcessor.ORDER + 1)
public class CustomEnvironmentPostProcessor implements EnvironmentPostProcessor {
private static final String PROPERTY_SOURCE_NAME = "discoveryProperties";
private static final String SERVICE_REGISTRY_CONFIG_KEY = "spring.cloud.service-registry.auto-registration.enabled";
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment,
SpringApplication application) {
String serviceRegistry = environment.getProperty(SERVICE_REGISTRY_CONFIG_KEY);
if(!StringUtils.hasText(serviceRegistry)) {
boolean isLinux = System.getProperty("os.name").toLowerCase().contains("linux");
Map<String, Object> map = new HashMap<>(1);
map.put(SERVICE_REGISTRY_CONFIG_KEY, isLinux);
MapPropertySource propertySource = new MapPropertySource(PROPERTY_SOURCE_NAME, map);
environment.getPropertySources().addLast(propertySource);
}
}
}到此这篇关于springcloud本地服务不注册到注册中心的文章就介绍到这了,更多相关springcloud注册中心内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Lombok 的@StandardException注解解析
@StandardException 是一个实验性的注解,添加到 Project Lombok 的 v__1.18.22 版本中,在本教程中,我们将使用 Lombok 的 @StandardException 注解自动生成异常类型类的构造函数,需要的朋友可以参考下2023-05-05
SpringCloud如何使用Eureka实现服务之间的传递数据
这篇文章主要介绍了SpringCloud使用Eureka实现服务之间的传递数据操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-06-06
关于JSON.toJSONString()和Gson.toJson()方法的比较
本文介绍了两种将Java对象转换为JSON字符串的方法:阿里的`JSON.toJSONString()`和谷歌的`Gson.toJson()`,通过一个示例,展示了当使用继承关系且子类覆盖父类字段时,`Gson`会报错,而`JSON`可以正常运行,作者建议在处理JSON相关操作时使用阿里的`JSON`类2024-11-11


最新评论