spring cloud 는 spring boot 2.x/Finchley.RELEASE 가 만난 구덩이 로 업그레이드 되 었 습 니 다.
현저 한 변화:
질문
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
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.