Eureka注册中心通用写法和配置

  • 下面简单介绍下 Eureka 注册中心的通用写法

  • 新建个空项目,pom 中加入如下依赖

xml 复制代码
<dependencies>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
       <version>2.5.12</version>
   </dependency>

   <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
       <version>3.0.5</version>
   </dependency>

   <dependency>
       <groupId>at.twinformatics</groupId>
       <artifactId>eureka-consul-adapter</artifactId>
       <version>1.3.0</version>
   </dependency>

   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-security</artifactId>
       <version>2.5.8</version>
   </dependency>

   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-actuator</artifactId>
       <version>2.7.18</version>
   </dependency>
</dependencies>
  • 新建个包路径:com.xdr630.registry.config
java 复制代码
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Value("${eureka.security.enabled:false}")
    private boolean securityEnabled;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
    	// 关闭csrf设置
        http.csrf().disable();
        if(!securityEnabled){
        	// 配置不需要登录验证
            http.authorizeRequests().anyRequest().permitAll()
                .and().logout().permitAll();
            return;
        }
        super.configure(http);
    }
}
  • 在 com.xdr630.registry 包下,新建启动类
java 复制代码
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

    private static final Logger log = LoggerFactory.getLogger(EurekaServerApplication.class);

    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(EurekaServerApplication.class);
        app.addListeners(new ApplicationPidFileWriter(), new WebServerPortFileWriter());
        Environment env = app.run(args).getEnvironment();
        logApplicationStartup(env);
    }

    private static void logApplicationStartup(Environment env) {
        String protocol = "http";
        if (env.getProperty("server.ssl.key-store") != null) {
            protocol = "https";
        }
        String serverPort = env.getProperty("server.port");
        String contextPath = env.getProperty("server.servlet.context-path");
        if (StringUtils.isEmpty(contextPath)) {
            contextPath = "/";
        }
        String hostAddress = "localhost";
        try {
            hostAddress = InetAddress.getLocalHost().getHostAddress();
        } catch (UnknownHostException e) {
            log.warn("The host name could not be determined, using `localhost` as fallback");
        }
        // @formatter:off
        log.info("\n----------------------------------------------------------\n\t" +
                "Application '{}' is running! Access URLs:\n\t" +
                "Local: \t\t{}://localhost:{}{}\n\t" +
                "External: \t{}://{}:{}{}\n\t" +
                "Profile(s): \t{}\n----------------------------------------------------------",
            env.getProperty("spring.application.name"),
            protocol,
            serverPort,
            contextPath,
            protocol,
            hostAddress,
            serverPort,
            contextPath,
            env.getActiveProfiles());
        // @formatter:on
    }
}
  • resources 下 application.yml
yml 复制代码
spring:
  application:
     name: eureka-registry
  # 配置认证用户名和密码,不配置系统会随机生成
  security:
    user:
      name: user	#认证用户名
      password: 123456 #认证密码
server:
  port: 8081
    
eureka:
  server:
    #关闭自我保护模式
    enableSelfPreservation: false
    #主动失效时间,默认60*1000
    evictionIntervalTimerInMs: 5000
    #禁用readOnlyCacheMap
    useReadOnlyResponseCache: false
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      #defaultZone: http://localhost:8081/eureka/  #未开启认证时url
      defaultZone: http://user:123456@localhost:8081/eureka/ #开启认证时url


management:
  endpoints:
    web:
      exposure:
        include: "*" #["configprops", "env", "health", "info", "jhimetrics", "logfile", "loggers", "threaddump"]
  endpoint:
    health:
      show-details: always #when_authorized
    env:
      enabled: false
    mappings:
      enabled: false
    configprops:
      enabled: false
    heapdump:
      enabled: false
    loggers:
      enabled: false
    conditions:
      enabled: false
    beans:
      enabled: false
  metrics:
    enable:
      http: true
      jvm: true
      logback: true
      process: true
      system: true
    distribution:
      percentiles-histogram:
        all: true
      percentiles:
        all: 0, 0.5, 0.75, 0.95, 0.99, 1.0
  • logback-spring.xml
xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<configuration scan="false">
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />

    <property name="APP_NAME" value="registry-eureka"/>
    <property name="LOG_FILE" value="${BUILD_FOLDER:-logs}/${APP_NAME}"/>
    <property name="LOG_PATTERN" value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] %level [${APP_NAME:-},%X{traceId},%X{spanId},%X{parentId}] ${PID:- } --- [%thread] %-40.40class{39} %L: %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx} \n"/>

    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE}-%d{yyyyMMdd}.log.%i</fileNamePattern>
            <maxFileSize>100MB</maxFileSize>
            <maxHistory>30</maxHistory>
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <Pattern>${LOG_PATTERN}</Pattern>
        </encoder>
    </appender>

    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
    </root>

    <logger name="org.mybatis.spring" level="INFO"/>
    <logger name="io.netty" level="INFO"/>
    <logger name="com.ulisesbocchio" level="INFO"/>
    <logger name="org.quartz" level="INFO"/>

</configuration>
相关推荐
yuniko-n3 分钟前
【JUC】Lock 和 synchronzied 锁
java
西柚小萌新10 分钟前
【LLM&&AI应用开发 八股文】--4.3.Agent智能体(下)
java·开发语言·数据库
北极有牛13 分钟前
cpp学习笔记--常量指针
java·开发语言·算法
java资料站20 分钟前
二、Spring AI Alibaba · ChatModel
java·windows·spring
十年Java程序媛44 分钟前
Java 接口和抽象类对比|Java8 新特性,抛弃老旧八股,正确选型
java·spring boot·后端
caoerzhong1 小时前
JeeWMS 开源 WMS 部署避坑指南:Java 仓库管理系统的环境基线、四类根因与可复现交付
java·开发语言·开源
用户3721574261351 小时前
Java 合并 PDF 文件:完整合并、指定页面合并与流合并
java
sbjdhjd1 小时前
云安全 | Docker 容器逃逸复盘(三):docker.sock 挂载与 Docker-in-Docker 风险
经验分享·网络安全·docker·云原生·容器·kubernetes·云安全
热爱Liunx的丘丘人1 小时前
1、什么是K8s
云原生·容器·kubernetes
for_ever_love__1 小时前
MySQL 全文索引实战:FULLTEXT、ngram 中文分词与 MATCH AGAINST 到底该怎么用
java·python·mysql·全文检索·分词·索引·ngram