spring cloud 는 spring boot 2.x/Finchley.RELEASE 가 만난 구덩이 로 업그레이드 되 었 습 니 다.

15047 단어 springcloudFinchley
spring boot2.x 가 나 온 지 꽤 되 었 습 니 다.그리고 spring cloud 의 최신 Release 버 전 Finchley.RELEASE 는 기본적으로 spring boot 2.x 입 니 다.요 며칠 동안 오래된 프로젝트 를 낮은 버 전에 서 2.x 로 업그레이드 하려 고 시 도 했 습 니 다.
현저 한 변화:
  • 과 Spring Boot 2.0.x 호 환
  • Spring Boot 1.5.x
  • 은 지원 되 지 않 습 니 다.
  • 최저 요구 자바 8
  • 에 Spring Cloud Function 과 Spring Cloud Gateway
  • 이 추가 되 었 습 니 다.
    질문
    spring boot 2.x 는 gradle 버 전이 너무 낡 으 면 안 된다 고 요구 합 니 다.먼저 gradle 을 4.6 버 전 으로 업그레이드 한 다음 에 컴 파일 하고 여러 가지 문 제 를 gradle 홈 페이지 에서 찾 아 보 았 습 니 다.build.gradle 은 몇 가지 작은 부분 이 있 습 니 다.
    1.1 java-libary 프로젝트
    즉,일반 공구 꾸러미 와 같은 공용 jar,plugins{}은 첫 번 째 줄(buildscript 이 있 는 경 우 는 제외)에 두 어야 합 니 다.유사:
    
    plugins {
    
      id 'java-library'
    
    }
    그리고 홈 페이지 강좌 을 누 르 면 compile 은 implementation 으로 바 꾸 는 것 이 좋 습 니 다.
    
    dependencies {
      implementation(
          ...
      )
    }
    1.2 일반적인 자바 프로젝트(용기 가 독립 적 으로 실 행 될 수 있 는 항목 을 가리 키 는 말)
    
    buildscript {
    
     
    
      ext {
    
        springBootVersion = '2.0.1.RELEASE'
    
      }
    
     
    
      repositories {
    
        maven {
    
          url "http://maven.aliyun.com/nexus/content/groups/public/"
    
        }
    
        ...
    
      }
    
      dependencies {
    
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    
      }
    
    }
    
     
    
    apply plugin: 'java'
    
    apply plugin: 'org.springframework.boot'
    
    apply plugin: 'io.spring.dependency-management'
    
     
    
    dependencyManagement {
    
      imports {
    
        mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Finchley.RELEASE'
    
      }
    
    }<br>...
    또한,gradle 고 버 전 컴 파일 시 싫 은 힌트 가 있 습 니 다.Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.컴 파일 할 때 인 자 를 추가 할 수 있 습 니 다:--warning-mode=none 은 삭제 하지 않 습 니 다.즉,유사 합 니 다:
    gradle build --warning-mode=none -x test
    질문
    
    dependencies {
    
      ...
    
      implementation(
    
          ...
    
          'org.springframework.cloud:spring-cloud-starter-consul-discovery',
    
          'org.springframework.cloud:spring-cloud-starter-consul-config',
    
          'org.springframework.cloud:spring-cloud-starter-bus-kafka',
    
          'org.springframework.cloud:spring-cloud-starter-sleuth',
    
          'org.springframework.cloud:spring-cloud-sleuth-stream:1.3.4.RELEASE',
    
          'org.springframework.cloud:spring-cloud-starter-hystrix:1.4.4.RELEASE',
    
          'org.springframework.cloud:spring-cloud-netflix-hystrix-stream',
    
          'org.springframework.boot:spring-boot-starter-actuator',
    
          'org.springframework.boot:spring-boot-starter-undertow',
    
          'org.springframework.boot:spring-boot-starter-mail',
    
          'org.springframework.boot:spring-boot-starter-jdbc',
    
          'org.springframework.boot:spring-boot-starter-security',
    
          'org.slf4j:slf4j-api:1.7.25',
    
          'ch.qos.logback:logback-core:1.2.3',
    
          'org.thymeleaf:thymeleaf-spring5:3.0.9.RELEASE',
    
          'org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.1',
    
          'tk.mybatis:mapper-spring-boot-starter:1.2.4',
    
          'com.github.pagehelper:pagehelper-spring-boot-starter:1.2.3'
    
      )
    
      implementation('com.alibaba:druid:1.1.9') {
    
        exclude group: "com.alibaba", module: "jconsole"
    
        exclude group: "com.alibaba", module: "tools"
    
      }
    
      implementation('org.springframework.boot:spring-boot-starter-web') {
    
        exclude module: "spring-boot-starter-tomcat"
    
        exclude module: "spring-boot-starter-jetty"
    
      }
    
     
    
      testCompile 'org.springframework.boot:spring-boot-starter-test'
    
    }
    그 속
    'org.springframework.cloud:spring-cloud-sleuth-stream:1.3.4.RELEASE',
    'org.springframework.cloud:spring-cloud-starter-hystrix:1.4.4.RELEASE',
    이 두 항목 은 버 전 번 호 를 지정 해 야 합 니 다.그렇지 않 으 면 컴 파일 할 수 없습니다.(최신 2.x 버 전의 jar 패키지 가 중앙 창고 에 업로드 되 지 않 아 의존 도 를 자동 으로 식별 할 수 없습니다.또한 pagehelper 라 는 자주 사용 하 는 페이지 구성 요 소 는 위의 버 전 으로 설정 하 는 것 을 권장 합 니 다.그렇지 않 으 면 실행 중 오류 가 발생 할 수 있 습 니 다.
    질문
    spring boot 2.x 로 업그레이드 한 후,log4j 를 설정 하 든 log4j 2 를 설정 하 든 실행 할 때 항상 스 택 에 넘 치 는 error 를 보고 합 니 다.logback 으로 바 꾼 후 정상적으로 시작 합 니 다.기본 logback 을 사용 하 는 것 을 권장 합 니 다.항목 에 의존 하 는 설정 은 위의 것 을 참고 하 십시오.
    4.DataSourceBuilder 류 에서 찾 을 수 없 는 문제
    spring boot 2.x 는 이 종 류 를 package 로 바 꾸 었 기 때문에 찾 을 수 없습니다.자세 한 내용 은 다음 과 같 습 니 다.
    https://stackoverflow.com/questions/50011577/spring-boot-2-0-0-datasourcebuilder-not-found-in-autoconfigure-jar
    https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/jdbc/DataSourceBuilder.html
    해결 방법 은 org.springframework.boot:spring-boot-starter-jdbc 를 참조 하 는 것 입 니 다.
    코드 import 새 패키지 수정:org.springframework.boot.jdbc.DataSourceBuilder
    5.안전성 문제
    spring boot 2.x 는 안전성 을 강화 합 니 다.어떤 rest url 에 접근 하 더 라 도 기본적으로 로그 인 을 요구 합 니 다.application.yml 에 서 는 설정 을 통 해 닫 을 수 없고 코드 조정 만 쓸 수 있 습 니 다.
    
    import org.springframework.context.annotation.Configuration;
    
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    
    import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
    
    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
    
     
    
    @Configuration
    
    @EnableWebSecurity
    
    public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    
      @Override
    
      protected void configure(HttpSecurity http) throws Exception {
    
        http.authorizeRequests()
    
            .anyRequest()
    
            .permitAll()
    
            .and()
    
            .csrf()
    
            .disable();
    
      }
    
    }
    이렇게 하면 모든 url 에 접근 할 수 있 습 니 다.(외부 네트워크 에 노출 된 서비스 라면 조심 하 십시오)
    6.각종 actuator 모니터링 endpoint 의 경로 변화
    spring boot 2.x 에서 actuator 의 endpoint 기본 경 로 는/actuator 로 시작 합 니 다.이전 스타일 을 사용 하려 면/뿌리 아래 에 두 고 applicationo.yml 에서 아래 설정 을 참고 할 수 있 습 니 다.
    
    management:
    
     ...
    
     endpoints:
    
      web:
    
       base-path: /
    
       exposure:
    
        include: "*"
    또한/health 노드 는 기본 적 인 상황 에서 아주 적은 정보 만 출력 할 수 있 고 상세 한 정 보 는 설정 을 통 해 열 어야 합 니 다.
    
    management:
    
     ...
    
     endpoint:
    
      health:
    
       show-details: always
    
     ...
    7.${spring.cloud.client.ipAddress}인식 할 수 없습니다.
    spring cloud 2.x 리,${spring.cloud.client.ipAddress}이 표기 법 은 인식 되 지 않 고 시작 하 자마자 오 류 를 보고 합 니 다.여러 번 시도 해 보 았 지만 뜻밖에 A 를 소문 자로 바 꾸 면 됩 니 다.
    
    spring:
    
     ...
    
     application:
    
      name: sr-menu-service:${spring.cloud.client.ipaddress}
    이것 은 bug 일 것 같 습 니 다.새 버 전에 서 는 복 구 될 것 같 습 니 다.
    8.MetricWriter,SystemPublicMetrics 류 에서 찾 을 수 없 는 문제
    spring boot 2.x 에서 metrics 는 기본적으로 micrometer 로 바 뀌 었 습 니 다.원래 의 MetricWriter 와 같은 것 은 모두 제거 되 었 습 니 다.자세 한 내용 은 홈 페이지 문서 참조
    
    management:
    
     metrics:
    
      export:
    
       statsd:
    
        host: 10.0.*.*
    
        port: 8125
    
        flavor: etsy
    위의 설정 은 statsd 를 사용 하고 뛰 면 효 과 를 볼 수 있 습 니 다.다음 그림 을 보십시오.

    그러나 spring boot 1.x 에 비해 구체 적 인 값 을 직접 출력 하지 않 습 니 다.구체 적 인 값 을 보 려 면 사용 할 수 있 습 니 다.http://localhost:8001/metrics/jvm.memory.used

    이 중 VALUE 는 jvm 에서 사용 하 는 메모리(힙+noheap 포함)입 니 다.힙 구역(즉,쌓 인 메모리)만 보고 싶 으 면 사용 할 수 있 습 니 다.
    http://localhost:8001/metrics/jvm.memory.used?tag=area:heap

    동시에 grafana 에서 도 효 과 를 볼 수 있 습 니 다.

    주:현재 statsd 의 접 두 사 를 수정 할 수 없습니다.코드 가 죽은 statsd 입 니 다.

    한 대의 기계 에 여러 개의 spring cloud 마이크로 서 비 스 를 배치 하면 grafana 에 서 는 구분 할 수 없다.
    또한 코드 를 통 해 이러한 metrics 의 구체 적 인 기준 치 를 얻 으 려 면 아래 코드 를 참고 하 십시오.
    
    import io.micrometer.core.instrument.Meter;
    
    import io.micrometer.core.instrument.MeterRegistry;
    
    import io.micrometer.core.instrument.Statistic;
    
    import org.junit.Test;
    
    import org.springframework.beans.factory.annotation.Autowired;
    
     
    
    import java.util.LinkedHashMap;
    
    import java.util.Map;
    
    import java.util.function.BiFunction;
    
     
    
    public class MetricsTest extends BaseTest {
    
     
    
      private String METRIC_MSG_FORMAT = "Metric >> %s = %d";
    
     
    
      @Autowired
    
      private MeterRegistry meterRegistry;
    
     
    
      @Test
    
      public void testStatsdConfig() {
    
        String metric = "jvm.memory.used";
    
        Meter meter = meterRegistry.find(metric).meter();
    
        Map<Statistic, Double> stats = getSamples(meter);
    
        logger.info(String.format(METRIC_MSG_FORMAT, metric, stats.get(Statistic.VALUE).longValue()));
    
      }
    
     
    
      private Map<Statistic, Double> getSamples(Meter meter) {
    
        Map<Statistic, Double> samples = new LinkedHashMap<>();
    
        mergeMeasurements(samples, meter);
    
        return samples;
    
      }
    
     
    
      private void mergeMeasurements(Map<Statistic, Double> samples, Meter meter) {
    
        meter.measure().forEach((measurement) -> samples.merge(measurement.getStatistic(),
    
            measurement.getValue(), mergeFunction(measurement.getStatistic())));
    
      }
    
     
    
      private BiFunction<Double, Double, Double> mergeFunction(Statistic statistic) {
    
        return Statistic.MAX.equals(statistic) ? Double::max : Double::sum;
    
      }
    
    }
    질문
    WebMvcConfigurerAdapter 라 는 종 류 는 최신 spring boot 에서 유행 이 지난 것 으로 표시 되 었 습 니 다.정상 적 인 용법 은 다음 과 같 습 니 다.
    
    import org.springframework.context.annotation.Bean;
    
    import org.springframework.context.annotation.Configuration;
    
    import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
    
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
    
    import springfox.documentation.builders.ApiInfoBuilder;
    
    import springfox.documentation.builders.PathSelectors;
    
    import springfox.documentation.builders.RequestHandlerSelectors;
    
    import springfox.documentation.service.ApiInfo;
    
    import springfox.documentation.service.Contact;
    
    import springfox.documentation.spi.DocumentationType;
    
    import springfox.documentation.spring.web.plugins.Docket;
    
    import springfox.documentation.swagger2.annotations.EnableSwagger2;
    
     
    
    /**
    
     * @author yangjunming
    
     * @date 13/10/2017
    
     */
    
    @Configuration
    
    @EnableSwagger2
    
    public class SwaggerConfig extends WebMvcConfigurationSupport {
    
     
    
      @Override
    
      protected void addResourceHandlers(ResourceHandlerRegistry registry) {
    
        registry.addResourceHandler("swagger-ui.html")
    
            .addResourceLocations("classpath:/META-INF/resources/");
    
     
    
        registry.addResourceHandler("/webjars/**")
    
            .addResourceLocations("classpath:/META-INF/resources/webjars/");
    
      }
    
     
    
      @Bean
    
      public Docket createRestApi() {
    
        return new Docket(DocumentationType.SWAGGER_2)
    
            .apiInfo(apiInfo())
    
            .select()
    
            .apis(RequestHandlerSelectors.basePackage("sr.service.menu.controller"))
    
            .paths(PathSelectors.any())
    
            .build();
    
      }
    
     
    
      private ApiInfo apiInfo() {
    
        return new ApiInfoBuilder()
    
            .title("menu-service online api document")
    
            .description("    ")
    
            .contact(new Contact("       ", "http://yjmyzz.cnblogs.com/", "[email protected]"))
    
            .version("1.0.0")
    
            .build();
    
      }
    
    }
    첨부:일부 참고 문서:
    https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide
    https://spring.io/blog/2017/09/15/security-changes-in-spring-boot-2-0-m4
    https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-Security-2.0
    https://docs.spring.io/spring-boot/docs/2.0.4.RELEASE/reference/htmlsingle/
    https://github.com/pagehelper/pagehelper-spring-boot
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기