Spring Cloud 微服务启动时不注册/不上线

方案1

package cn.com.xuxiaowei;

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.discovery.EnableDiscoveryClientImportSelector;
import org.springframework.context.annotation.Configuration;

/**
 * 永久禁用自动注册:注册中心看不到启动的项目
 *
 * @author xuxiaowei
 * @since 0.0.1
 * @see <a href=
 * "https://docs.spring.io/spring-cloud-commons/reference/spring-cloud-commons/common-abstractions.html#serviceregistry-auto-registration">ServiceRegistry
 * Auto-Registration</a>
 * @see EnableDiscoveryClientImportSelector 注解 {@link EnableDiscoveryClient} 的
 * {@link EnableDiscoveryClient#autoRegister()} 属性实现原理
 */
@Configuration
@EnableDiscoveryClient(autoRegister = false)
public class DisableRegistrationConfig {

}

方案2

spring:
  cloud:
    service-registry:
      auto-registration:
        # 永久禁用自动注册:注册中心看不到启动的项目
        # https://docs.spring.io/spring-cloud-commons/reference/spring-cloud-commons/common-abstractions.html#serviceregistry-auto-registration
        enabled: false

方案3

package cn.com.xuxiaowei;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.cloud.client.serviceregistry.Registration;
import org.springframework.cloud.client.serviceregistry.ServiceRegistry;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Configuration;
import org.springframework.lang.NonNull;

/**
 * 启动项目注册成功后,自动下线:注册中心能看到项目并且已下线
 *
 * @author xuxiaowei
 * @since 0.0.1
 * @see com.alibaba.nacos.api.config.ConfigService
 */
@Slf4j
@Configuration
public class RegisterAutoDownConfig implements ApplicationListener<ApplicationReadyEvent> {

	private static final String UP = "UP";

	private static final String DOWN = "DOWN";

	private Registration registration;

	private ServiceRegistry<Registration> serviceRegistry;

	@Autowired
	public void setRegistration(Registration registration) {
		this.registration = registration;
	}

	@Autowired
	public void setServiceRegistry(ServiceRegistry<Registration> serviceRegistry) {
		this.serviceRegistry = serviceRegistry;
	}

	@Override
	public void onApplicationEvent(@NonNull ApplicationReadyEvent event) {
		String status = serviceRegistry.getStatus(registration);
		if (!StringUtils.hasText(status)) {
			log.info("当前服务未知状态:{}", status);
		}
		else if (UP.equals(status)) {
			log.info("当前服务已上线");
		}

		try {
			serviceRegistry.setStatus(registration, DOWN);
			log.info("当前服务下线成功");
		}
		catch (Exception e) {
			log.error("当前服务下线失败", e);
		}
	}

}