相关系列文章

Spring boot升级到2.3.2.Release和Spring framework升级到5.28.Release踩过的坑_keeppractice的博客-CSDN博客

Hibernate升级到5.4.18.final的过程踩过的坑_keeppractice的博客-CSDN博客

Spring boot admin 升级到2.3.1 遇到的问题总结_keeppractice的博客-CSDN博客

目录

1  java.lang.ClassNotFoundException: org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata

2.不能解决 spring-cloud-starter-netflix-hystrix, spring-cloud-starter-netflix-hystrix-dashboard,spring-cloud-starter-netflix-zuul.

3. 编译问题:ClientFilter和HTTPBasicAuthFilter类找不到了。

4. feign.hystrix.FallbackFactory类找不到了

5. java.lang.NoSuchMethodError: org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerProperties.getServlet()Lorg/springframework/boot/actuate/autoconfigure/web/server/ManagementServerProperties$Servlet;

6.  org.mockito.Matchers 编译错误,这个类不见了

7. spring-data-rest-hal-browser依赖包不能解决,不见了

8. The dependencies of some of the beans in the application context form a cycle

9. The following method did not exist: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;

10 Keystore was tampered with, or password was incorrect

11. java.lang.IllegalStateException: couldn't determine local port. Please set spring.boot.admin.client.instance.service-base-url

12. java.lang.ClassNotFoundException: org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy

13. java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/AnnotationIntrospector$XmlExtensions

14. java.lang.NoSuchMethodError: org.springframework.boot.web.servlet.error.ErrorController.getErrorPath()Ljava/lang/String;

15. Caused by: com.netflix.client.ClientException: Load balancer does not have available server for client: xxxx

16. java.lang.AbstractMethodError: org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.choose(Ljava/lang/String;Lorg/springframework/cloud/client/loadbalancer/Request;)Lorg/springframework/cloud/client/ServiceInstance;


版本

Library Current Upgraded
Spring-boot 2.3.2 2.6.2 
Spring cloud Hoxton.SR8 2021.0.0 
Spring 5.2.8.RELEASE 5.3.14
hibernate 5.4.18.Final 5.4.33.Final
Spring admin 2.3.1 2.4.1

1  java.lang.ClassNotFoundException: org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata

错误信息:

Caused by: java.lang.NoClassDefFoundError: org/springframework/boot/context/properties/ConfigurationBeanFactoryMetadataat java.lang.Class.getDeclaredMethods0(Native Method) ~[?:1.8.0_51]at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[?:1.8.0_51]at java.lang.Class.getDeclaredMethods(Class.java:1975) ~[?:1.8.0_51]at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:463) ~[spring-core-5.3.14.jar:5.3.14]at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:321) ~[spring-core-5.3.14.jar:5.3.14]at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.buildPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:417) ~[spring-orm-5.3.14.jar:5.3.14]at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:388) ~[spring-orm-5.3.14.jar:5.3.14]at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(PersistenceAnnotationBeanPostProcessor.java:335) ~[spring-orm-5.3.14.jar:5.3.14]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1116) ~[spring-beans-5.3.14.jar:5.3.14]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594) ~[spring-beans-5.3.14.jar:5.3.14]... 30 more
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadataat java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[?:1.8.0_51]at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_51]at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[?:1.8.0_51]at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_51]at java.lang.Class.getDeclaredMethods0(Native Method) ~[?:1.8.0_51]
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[?:1.8.0_51]

错误原因:

Spring cloud用的是老版本Hoxton.SR8

Spring Cloudhttps://spring.io/projects/spring-cloud

Release Train

Boot Version

2021.0.x aka Jubilee

2.6.x

2020.0.x aka Ilford

2.4.x, 2.5.x (Starting with 2020.0.3)

Hoxton

2.2.x, 2.3.x (Starting with SR5)

Greenwich

2.1.x

Finchley

2.0.x

Edgware

1.5.x

Dalston

1.5.x

Table 1. Release train Spring Boot compatibility

解决方法:

升级spring cloud ->2021.0.0 版本

2.不能解决 spring-cloud-starter-netflix-hystrix, spring-cloud-starter-netflix-hystrix-dashboard,spring-cloud-starter-netflix-zuul.

原因待查;

解决方法:

加特定的版本,比如加2.2.6.RELEASE

  <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId><version>2.2.6.RELEASE</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId><version>2.2.6.RELEASE</version></dependency>  <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-zuul</artifactId><version>2.2.6.RELEASE</version></dependency>

3. 编译问题:ClientFilter和HTTPBasicAuthFilter类找不到了。

import com.sun.jersey.api.client.filter.ClientFilter;
import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter;

原因待查;

可以看到Jersey-client的scope类型是runtime.

  <modelVersion>4.0.0</modelVersion><groupId>com.netflix.ribbon</groupId><artifactId>ribbon-httpclient</artifactId><version>2.3.0</version><dependencies>
....<dependency><groupId>com.sun.jersey</groupId><artifactId>jersey-client</artifactId><version>1.19.1</version><scope>runtime</scope></dependency>
....

解决方法:加一下面的依赖

        <dependency><groupId>com.sun.jersey</groupId><artifactId>jersey-client</artifactId><version>1.19.1</version></dependency>

4. feign.hystrix.FallbackFactory类找不到了

原因待查:

解决方法:换成下面这个包

import org.springframework.cloud.openfeign.FallbackFactory;

5. java.lang.NoSuchMethodError: org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerProperties.getServlet()Lorg/springframework/boot/actuate/autoconfigure/web/server/ManagementServerProperties$Servlet;

错误信息:

[2022-02-11 09:02:05.325][][]@[] ERROR[registrationTask1](org.springframework.scheduling.support.TaskUtils$LoggingErrorHandler:95) - Unexpected error occurred in scheduled task
java.lang.NoSuchMethodError: org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerProperties.getServlet()Lorg/springframework/boot/actuate/autoconfigure/web/server/ManagementServerProperties$Servlet;at de.codecentric.boot.admin.client.registration.ServletApplicationFactory.getManagementContextPath(ServletApplicationFactory.java:86) ~[spring-boot-admin-client-2.3.1.jar:2.3.1]at de.codecentric.boot.admin.client.registration.ServletApplicationFactory.getManagementBaseUrl(ServletApplicationFactory.java:77) ~[spring-boot-admin-client-2.3.1.jar:2.3.1]at de.codecentric.boot.admin.client.registration.DefaultApplicationFactory.getHealthUrl(DefaultApplicationFactory.java:154) ~[spring-boot-admin-client-2.3.1.jar:2.3.1]at de.codecentric.boot.admin.client.registration.DefaultApplicationFactory.createApplication(DefaultApplicationFactory.java:80) ~[spring-boot-admin-client-2.3.1.jar:2.3.1]at de.codecentric.boot.admin.client.registration.DefaultApplicationRegistrator.register(DefaultApplicationRegistrator.java:56) ~[spring-boot-admin-client-2.3.1.jar:2.3.1]at de.codecentric.boot.admin.client.registration.RegistrationApplicationListener$$Lambda$1147/853202089.run(Unknown Source) ~[?:?]at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) ~[spring-context-5.3.14.jar:5.3.14]at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_51]at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) ~[?:1.8.0_51]at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) ~[?:1.8.0_51]at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) ~[?:1.8.0_51]at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[?:1.8.0_51]at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[?:1.8.0_51]at java.lang.Thread.run(Thread.java:745) [?:1.8.0_51]

原因:升级springboot到2.6.2版本后,ManagementServerProperties类改了。已经没有.getServlet().getContextPath()方法了。

在2.3.1版本的spring admin里getManagementContextPath方法如下:

package de.codecentric.boot.admin.client.registrationpublic class ServletApplicationFactory extends DefaultApplicationFactory {protected String getManagementContextPath() {return management.getServlet().getContextPath();}

在2.4.1版本的spring admin里getManagementContextPath方法如下:

public class ServletApplicationFactory extends DefaultApplicationFactory {protected String getManagementContextPath() {return management.getBasePath();}

解决方法:

升级spring admin 到2.4.1版本

6.  org.mockito.Matchers 编译错误,这个类不见了

原因:

Use org.mockito.ArgumentMatchers. This class is now deprecated in order to avoid a name clash with Hamcrest * org.hamcrest.Matchers class. This class will likely be removed in version 3.0.

解决方法:

org.mockito.ArgumentMatchers 用这个类。

其它:

Matchers.anyObject()   替换方案是:ArgumentMatchers.any()

Matchers.anyListOf(String.class) 替换方案是: ArgumentMatchers.anyList()

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

上面的编译问题,加junit依赖

        <dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency>

7. spring-data-rest-hal-browser依赖包不能解决,不见了

相关代码

        <dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-rest-hal-browser</artifactId></dependency>

解决方法

        <dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-rest-hal-explorer</artifactId></dependency>

8. The dependencies of some of the beans in the application context form a cycle


Description:The dependencies of some of the beans in the application context form a cycle:userController (field private xxx.user.service.userWorkflowService xxx.user.controller.userController.userService)↓userProcessorConfig↓xxx.core.workflow.TestWorkflowConfiguration#0 (field private xxx.Test.service.TestDataService xxx.core.workflow.TestWorkflowConfiguration.pendingTestDataService)
┌─────┐
|  xxx.Test.TestConfiguration#0
↑     ↓
|  xxx.Test.util.ATestRuleConfiguration#0 (field private xxx.Test.TestConfiguration xxx.Test.util.ATestRuleConfiguration.TestConfiguration)
└─────┘Action:Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

解决方法:

spring.main.allow-circular-references=true

9. The following method did not exist: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;


An attempt was made to call a method that does not exist. The attempt was made from the following location:org.apache.catalina.authenticator.AuthenticatorBase.startInternal(AuthenticatorBase.java:1318)The following method did not exist:javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;The calling method's class, org.apache.catalina.authenticator.AuthenticatorBase, was loaded from the following location:jar:file::**/WEB-INF/lib/tomcat-embed-core-9.0.56.jar!/org/apache/catalina/authenticator/AuthenticatorBase.classThe called method's class, javax.servlet.ServletContext, is available from the following locations:jar:file:***/WEB-INF/lib/servlet-api-2.5.jar!/javax/servlet/ServletContext.classjar:file::**/tomcat-embed-core-9.0.56.jar!/javax/servlet/ServletContext.classThe called method's class hierarchy was loaded from the following locations:javax.servlet.ServletContext: jar:file::**/WEB-INF/lib/servlet-api-2.5.jar!/Action:Correct the classpath of your application so that it contains compatible versions of the classes org.apache.catalina.authenticator.AuthenticatorBase and javax.servlet.ServletContext

原因:

我引进了servlet-api.2.5 版本

但是ServletContext.getVirtualServerName() 方法只有在3.1后才有。

public interface ServletContext {
。。。。/*** Get the primary name of the virtual host on which this context is* deployed. The name may or may not be a valid host name.** @return The primary name of the virtual host on which this context is*         deployed* @since Servlet 3.1*/public String getVirtualServerName();

解决方法:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId><exclusions><exclusion><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId></exclusion></exclusions></dependency>

10 Keystore was tampered with, or password was incorrect

错误信息

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
[2022-02-14 10:51:06.847][][]@[] ERROR[main](org.springframework.boot.SpringApplication:819) - Application run failed
org.springframework.context.ApplicationContextException: Failed to start bean 'webServerStartStop'; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat serverat org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:181) ~[spring-context-5.3.14.jar!/:5.3.14]at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) ~[spring-context-5.3.14.jar!/:5.3.14]
Caused by: org.springframeworkboot.web.server.WebServerException: Unable to start embedded Tomcat serverat org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start(TomcatWebServer.java:229) ~[spring-boot-2.6.2.jar!/:2.6.2]at org.springframework.boot.web.servlet.context.WebServerStartStopLifecycle.start(WebServerStartStopLifecycle.java:43) ~[spring-boot-2.6.2.jar!/:2.6.2]at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) ~[spring-context-5.3.14.jar!/:5.3.14]... 20 more
Caused by: java.lang.IllegalArgumentException: standardService.connector.startFailedat org.apache.catalina.core.StandardService.addConnector(StandardService.java:238) ~[tomcat-embed-core-9.0.56.jar!/:?]at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.addPreviouslyRemovedConnectors(TomcatWebServer.java:282) ~[spring-boot-2.6.2.jar!/:2.6.2]at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start(TomcatWebServer.java:213) ~[spring-boot-2.6.2.jar!/:2.6.2]at org.springframework.boot.web.servlet.context.WebServerStartStopLifecycle.start(WebServerStartStopLifecycle.java:43) ~[spring-boot-2.6.2.jar!/:2.6.2]at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) ~[spring-context-5.3.14.jar!/:5.3.14]... 20 more
Caused by: org.apache.catalina.LifecycleException: Protocol handler start failedat org.apache.catalina.connector.Connector.startInternal(Connector.java:1075) ~[tomcat-embed-core-9.0.56.jar!/:?]at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.56.jar!/:?]... 20 moreCaused by: java.lang.IllegalArgumentException: Keystore was tampered with, or password was incorrectat org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:99) ~[tomcat-embed-core-9.0.56.jar!/:?]at org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:71) ~[tomcat-embed-core-9.0.56.jar!/:?]... 20 more
Caused by: java.io.IOException: Keystore was tampered with, or password was incorrectat com.sun.crypto.provider.JceKeyStore.engineLoad(JceKeyStore.java:882) ~[sunjce_provider.jar:1.8.0_311]at java.security.KeyStore.load(KeyStore.java:1445) ~[?:1.8.0_311]at org.apache.tomcat.util.security.KeyStoreUtil.load(KeyStoreUtil.java:69) ~[tomcat-embed-core-9.0.56.jar!/:?]a... 20 more
Caused by: java.security.UnrecoverableKeyException: Password verification failedat com.sun.crypto.provider.JceKeyStore.engineLoad(JceKeyStore.java:882) ~[sunjce_provider.jar:1.8.0_311]at java.security.KeyStore.load(KeyStore.java:1445) ~[?:1.8.0_311]at org.apache.tomcat.util.security.KeyStoreUtil.load(KeyStoreUtil.java:69) ~[tomcat-embed-core-9.0.56.jar!/:?]at org.apache.tomcat.util.net.SSLUtilBase.getStore(SSLUtilBase.java:215) ~[tomcat-embed-core-9.0.56.jar!/:?]at org.apache.tomcat.util.net.SSLHostConfigCertificate.getCertificateKeystore(SSLHostConfigCertificate.java:207) ~[tomcat-embed-core-9.0.56.jar!/:?]at org.apache.tomcat.util.net.SSLUtilBase.getKeyManagers(SSLUtilBase.java:281) ~[tomcat-embed-core-9.0.56.jar!/:?]

解决方法

设置下面参数:

server.ssl.key-store-password= ***

参考资料:https://github.com/spring-projects/spring-boot/issues/24256

11. java.lang.IllegalStateException: couldn't determine local port. Please set spring.boot.admin.client.instance.service-base-url

解决方法:

设置下面参数,因为tomcat不知道port号

spring.boot.admin.client.instance.serviceBaseUrl=http://localhost:8080 (application url)

参考资料

couldn't determine local port. Please supply service-base-url. · Issue #796 · codecentric/spring-boot-admin · GitHub

12. java.lang.ClassNotFoundException: org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy

错误信息:

Caused by: java.lang.ClassNotFoundException: org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategyat org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1365) ~[catalina.jar:9.0.36.redhat-8]at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188) ~[catalina.jar:9.0.36.redhat-8]at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties$Naming.lambda$applyNamingStrategies$1(HibernateProperties.java:178) ~[spring-boot-autoconfigure-2.6.2.jar:2.6.2]at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties$Naming.lambda$applyNamingStrategy$2(HibernateProperties.java:187) ~[spring-boot-autoconfigure-2.6.2.jar:2.6.2]at java.util.HashMap.computeIfAbsent(HashMap.java:1129) ~[?:1.8.0_311]at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties$Naming.applyNamingStrategy(HibernateProperties.java:187) ~[spring-boot-autoconfigure-2.6.2.jar:2.6.2]at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties$Naming.applyNamingStrategies(HibernateProperties.java:177) ~[spring-boot-autoconfigure-2.6.2.jar:2.6.2]at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties$Naming.access$000(HibernateProperties.java:146) ~[spring-boot-autoconfigure-2.6.2.jar:2.6.2]at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.getAdditionalProperties(HibernateProperties.java:102) ~[spring-boot-autoconfigure-2.6.2.jar:2.6.2]at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.determineHibernateProperties(HibernateProperties.java:95) ~[spring-boot-autoconfigure-2.6.2.jar:2.6.2]at org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration.getVendorProperties(HibernateJpaConfiguration.java:132) ~[spring-boot-autoconfigure-2.6.2.jar:2.6.2]at org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.entityManagerFactory(JpaBaseConfiguration.java:132) ~[spring-boot-autoconfigure-2.6.2.jar:2.6.2]at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_311]at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_311]

原因是:

org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy

这个类是hibenrate.5.5 新引进的类。但是我们用的hibernate.5.3.x

Hibernate ORM 5.5.4.Final released - In Relation To

解决方法:

加下面系统参数

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

参考资料

https://www.baeldung.com/hibernate-field-naming-spring-boot

13. java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/AnnotationIntrospector$XmlExtensions

错误信息:

java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/AnnotationIntrospector$XmlExtensionsat com.fasterxml.jackson.dataformat.xml.util.AnnotationUtil.findNamespaceAnnotation(AnnotationUtil.java:19) ~[jackson-dataformat-xml-2.11.1.jar:2.11.1]at com.fasterxml.jackson.dataformat.xml.ser.XmlBeanSerializerModifier.changeProperties(XmlBeanSerializerModifier.java:44) ~[jackson-dataformat-xml-2.11.1.jar:2.11.1]at com.fasterxml.jackson.databind.ser.BeanSerializerFactory.constructBeanOrAddOnSerializer(BeanSerializerFactory.java:397) ~[jackson-databind-2.10.1.jar:2.10.1]at com.fasterxml.jackson.databind.ser.BeanSerializerFactory.findBeanOrAddOnSerializer(BeanSerializerFactory.java:286) ~[jackson-databind-2.10.1.jar:2.10.1]at com.fasterxml.jackson.databind.ser.BeanSerializerFactory._createSerializer2(BeanSerializerFactory.java:231) ~[jackson-databind-2.10.1.jar:2.10.1]at com.fasterxml.jackson.databind.ser.BeanSerializerFactory.createSerializer(BeanSerializerFactory.java:165) ~[jackson-databind-2.10.1.jar:2.10.1]at com.fasterxml.jackson.databind.SerializerProvider._createUntypedSerializer(SerializerProvider.java:1388) ~[jackson-databind-2.10.1.jar:2.10.1]at com.fasterxml.jackson.databind.SerializerProvider._createAndCacheUntypedSerializer(SerializerProvider.java:1336) ~[jackson-databind-2.10.1.jar:2.10.1]at com.fasterxml.jackson.databind.SerializerProvider._findExplicitUntypedSerializer(SerializerProvider.java:1305) ~[jackson-databind-2.10.1.jar:2.10.1]at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.hasSerializerFor(DefaultSerializerProvider.java:260) ~[jackson-databind-2.10.1.jar:2.10.1]at com.fasterxml.jackson.databind.ObjectMapper.canSerialize(ObjectMapper.java:3007) ~[jackson-databind-2.10.1.jar:2.10.1]at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.canWrite(AbstractJackson2HttpMessageConverter.java:274) ~[spring-web-5.3.14.jar:5.3.14]at org.springframework.http.converter.AbstractGenericHttpMessageConverter.canWrite(AbstractGenericHttpMessageConverter.java:76) ~[spring-web-5.3.14.jar:5.3.14]at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.getProducibleMediaTypes(AbstractMessageConverterMethodProcessor.java:380) ~[spring-webmvc-5.3.14.jar:5.3.14]

解决方法:有两个解决方法

1. 升级Jackson相关的jar 到2.13.0

pom.xml

<jackson-bom.version>2.13.1</jackson-bom.version>

或升级

<dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.13.0</version>
      </dependency>

2. 降级Jackson相关的jar到2.11.1

pom.xml

<jackson-bom.version>2.11.1</jackson-bom.version>

参考资料:

Jackson Release 2.13 · FasterXML/jackson Wiki · GitHub

14. java.lang.NoSuchMethodError: org.springframework.boot.web.servlet.error.ErrorController.getErrorPath()Ljava/lang/String;

Caused by: java.lang.NoSuchMethodError: org.springframework.boot.web.servlet.error.ErrorController.getErrorPath()Ljava/lang/String;at org.springframework.cloud.netflix.zuul.web.ZuulHandlerMapping.lookupHandler(ZuulHandlerMapping.java:87) ~[spring-cloud-netflix-zuul-2.2.6.RELEASE.jar:2.2.6.RELEASE]at org.springframework.web.servlet.handler.AbstractUrlHandlerMapping.getHandlerInternal(AbstractUrlHandlerMapping.java:152) ~[spring-webmvc-5.3.14.jar:5.3.14]at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:498) ~[spring-webmvc-5.3.14.jar:5.3.14]at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1261) ~[spring-webmvc-5.3.14.jar:5.3.14]at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1043) ~[spring-webmvc-5.3.14.jar:5.3.14]... 71 more

解决方法

https://www.jianshu.com/p/94353ee0707b

https://stackoverflow.com/questions/68100671/nosuchmethoderror-org-springframework-boot-web-servlet-error-errorcontroller-ge

15. Caused by: com.netflix.client.ClientException: Load balancer does not have available server for client: xxxx

错误信息:

com.netflix.zuul.exception.ZuulException: Forwarding errorat org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.handleException(RibbonRoutingFilter.java:198) ~[spring-cloud-netflix-zuul-2.2.6.RELEASE.jar:2.2.6.RELEASE]at org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.forward(RibbonRoutingFilter.java:173) ~[spring-cloud-netflix-zuul-2.2.6.RELEASE.jar:2.2.6.RELEASE]at org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.run(RibbonRoutingFilter.java:119) ~[spring-cloud-netflix-zuul-2.2.6.RELEASE.jar:2.2.6.RELEASE]at com.netflix.zuul.ZuulFilter.runFilter(ZuulFilter.java:117) ~[zuul-core-1.3.1.jar:1.3.1]at com.netflix.zuul.FilterProcessor.processZuulFilter(FilterProcessor.java:193) ~[zuul-core-1.3.1.jar:1.3.1]at com.netflix.zuul.FilterProcessor.runFilters(FilterProcessor.java:157) ~[zuul-core-1.3.1.jar:1.3.1]at com.netflix.zuul.FilterProcessor.route(FilterProcessor.java:118) ~[zuul-core-1.3.1.jar:1.3.1]at com.netflix.zuul.ZuulRunner.route(ZuulRunner.java:96) ~[zuul-core-1.3.1.jar:1.3.1]at com.netflix.zuul.http.ZuulServlet.route(ZuulServlet.java:116) ~[zuul-core-1.3.1.jar:1.3.1]at com.netflix.zuul.http.ZuulServlet.service(ZuulServlet.java:81) ~[zuul-core-1.3.1.jar:1.3.1]
....
Caused by: com.netflix.client.ClientException: Load balancer does not have available server for client: xxxxat com.netflix.loadbalancer.LoadBalancerContext.getServerFromLoadBalancer(LoadBalancerContext.java:483) ~[ribbon-loadbalancer-2.3.0.jar:2.3.0]at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:184) ~[ribbon-loadbalancer-2.3.0.jar:2.3.0]at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:180) ~[ribbon-loadbalancer-2.3.0.jar:2.3.0]at rx.Observable.unsafeSubscribe(Observable.java:10327) ~[rxjava-1.3.8.jar:1.3.8]at rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:94) ~[rxjava-1.3.8.jar:1.3.8]at rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:42) ~[rxjava-1.3.8.jar:1.3.8]at rx.Observable.unsafeSubscribe(Observable.java:10327) ~[rxjava-1.3.8.jar:1.3.8]at rx.internal.operators.OperatorRetryWithPredicate$SourceSubscriber$1.call(OperatorRetryWithPredicate.java:127) ~[rxjava-1.3.8.jar:1.3.8]at rx.internal.schedulers.TrampolineScheduler$InnerCurrentThreadScheduler.enqueue(TrampolineScheduler.java:73) ~[rxjava-1.3.8.jar:1.3.8]at rx.internal.schedulers.TrampolineScheduler$InnerCurrentThreadScheduler.schedule(TrampolineScheduler.java:52) ~[rxjava-1.3.8.jar:1.3.8]at rx.internal.operators.OperatorRetryWithPredicate$SourceSubscriber.onNext(OperatorRetryWithPredicate.java:79) ~[rxjava-1.3.8.jar:1.3.8]at rx.internal.operators.OperatorRetryWithPredicate$SourceSubscriber.onNext(OperatorRetryWithPredicate.java:45) ~[rxjava-1.3.8.jar:1.3.8]at rx.internal.util.ScalarSynchronousObservable$WeakSingleProducer.request(ScalarSynchronousObservable.java:276) ~[rxjava-1.3.8.jar:1.3.8]at rx.Subscriber.setProducer(Subscriber.java:209) ~[rxjava-1.3.8.jar:1.3.8]at rx.internal.util.ScalarSynchronousObservable$JustOnSubscribe.call(ScalarSynchronousObservable.java:138) ~[rxjava-1.3.8.jar:1.3.8]at rx.internal.util.ScalarSynchronousObservable$JustOnSubscribe.call(ScalarSynchronousObservable.java:129) ~[rxjava-1.3.8.jar:1.3.8]at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) ~[rxjava-1.3.8.jar:1.3.8]at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.3.8.jar:1.3.8]

解决方法:

1. 加下面标注

@RibbonClients(defaultConfiguration = RibbonEurekaClientConfig.class)

2. 创建下面配置类


import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.context.annotation.Bean;
import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.AvailabilityFilteringRule;
import com.netflix.loadbalancer.DummyPing;
import com.netflix.loadbalancer.IPing;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.Server;
import com.netflix.loadbalancer.ServerList;public class RibbonEurekaClientConfig {@Beanpublic IPing ribbonPing(IClientConfig config) {return new DummyPing();}@Beanpublic IRule ribbonRule(IClientConfig config) {return new AvailabilityFilteringRule();}@AutowiredDiscoveryClient discoveryClient;@Beanpublic ServerList<Server> getServerList(IClientConfig config) {return new ServerList<Server>() {@Overridepublic List<Server> getInitialListOfServers() {return new ArrayList<>();}@Overridepublic List<Server> getUpdatedListOfServers() {List<Server> serverList = new ArrayList<>();List<ServiceInstance> list = discoveryClient.getInstances(config.getClientName());for (ServiceInstance instance : list) {serverList.add(new Server(instance.getHost(), instance.getPort()));}return serverList;}};}
}

参考资料

microservices - Zuul Forwarding error, Load balancer does not have available server for client - Stack Overflow

具体原因可看

https://blog.csdn.net/keeppractice/article/details/122966391

16. java.lang.AbstractMethodError: org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.choose(Ljava/lang/String;Lorg/springframework/cloud/client/loadbalancer/Request;)Lorg/springframework/cloud/client/ServiceInstance;

错误信息

Caused by: java.lang.AbstractMethodError: org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.choose(Ljava/lang/String;Lorg/springframework/cloud/client/loadbalancer/Request;)Lorg/springframework/cloud/client/ServiceInstance;at org.springframework.cloud.openfeign.loadbalancer.FeignBlockingLoadBalancerClient.execute(FeignBlockingLoadBalancerClient.java:97) ~[spring-cloud-openfeign-core-3.1.0.jar:3.1.0]at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:119) ~[feign-core-11.7.jar:?]at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:89) ~[feign-core-11.7.jar:?]at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:100) ~[feign-core-11.7.jar:?]at com.sun.proxy.$Proxy1210.fetchAllEventTypes(Unknown Source) ~[?:?]at com.citi.icg.as.common.staticData.service.StaticDataServiceImpl.getAllEventTypes(StaticDataServiceImpl.java:46) ~[classes/:SPRING-2.3.2-SNAPSHOT]at com.citi.icg.as.common.staticData.controller.StaticDataController.getAllEventTypes(StaticDataController.java:45) ~[classes/:SPRING-2.3.2-SNAPSHOT]at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_311]at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_311]at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_311]at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_311]at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.14.jar:5.3.14]at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.14.jar:5.3.14]at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.14.jar:5.3.14]at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.14.jar:5.3.14]at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.14.jar:5.3.14]at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.14.jar:5.3.14]at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067) ~[spring-webmvc-5.3.14.jar:5.3.14]... 71 more

原因:

OpenFeign依赖spring-cloud-starter-loadbalancer做负载均衡,之前是用Ribbon的。如果加了spring-cloud-starter-netflix-zuul后,zuul依赖了Ribbon做负载均衡。

LoadBalancerClient 有两个RibbonLoadBalancerClient和BlockingLoadBalancerClient类。结果OpenFeigin用RibbonLoadBalancerClient使用报错。

如果单用OpenFeign是不会有这个问题的。

相关代码

OpenFeigin 用BlockingLoadBalancerClient, 但是Zuul用RibbonLoadBalancerClient。 但是这两类继承同一个类LoadBalancerClient而且只能实例化一个。

public class BlockingLoadBalancerClientAutoConfiguration {@Bean@ConditionalOnBean(LoadBalancerClientFactory.class)@ConditionalOnMissingBeanpublic LoadBalancerClient blockingLoadBalancerClient(LoadBalancerClientFactory loadBalancerClientFactory) {return new BlockingLoadBalancerClient(loadBalancerClientFactory);}
public class RibbonAutoConfiguration {...@Bean@ConditionalOnMissingBean(LoadBalancerClient.class)public LoadBalancerClient loadBalancerClient() {return new RibbonLoadBalancerClient(springClientFactory());}

解决方法:

   @Beanpublic LoadBalancerClient blockingLoadBalancerClient(LoadBalancerClientFactory loadBalancerClientFactory) {return new BlockingLoadBalancerClient(loadBalancerClientFactory);}

其它相关知识

Spring-boot 2.6.2版本所依赖的包。里面包含spring5.3.14版本.

Dependency Versionshttps://docs.spring.io/spring-boot/docs/2.6.2/reference/html/dependency-versions.html#dependency-versions

[错误总结]升级spring-boot->2.6.2|hiberate->5.4.33.Final|spring cloud->2021.0.0 |spring admin->2.4.1相关推荐

  1. 基于spring boot的邮件微服务消息中间件设计与实现 毕业论文+系统功能图v1.0.vsdx+项目源码

    下载地址:https://download.csdn.net/download/m0_63680064/36065411 项目介绍: 基于spring boot的邮件微服务消息中间件设计与实现 毕业论 ...

  2. 基于Spring Boot 2.5.1 微服务框架发布(Eurynome Cloud )

    企业级技术中台微服务架构与服务能力开发平台(Eurynome Cloud ) Eurynome Cloud是一款企业级技术中台微服务架构与服务能力开发平台.基于Spring Boot 2.5.1.Sp ...

  3. spring Boot 2 运维篇(spring boot程序的打包与部署,多环境开发配置文件的配置,spring boot集成日志框架)

    目录 1.SpringBoot程序的打包与运行 程序打包 程序运行 SpringBoot程序打包失败处理 命令行启动常见问题及解决方案 SpringBoot项目快速启动(Linux版) 2.配置高级 ...

  4. 54. spring boot日志升级篇—logback【从零开始学Spring Boot】

    在<44. Spring Boot日志记录SLF4J>章节中有关相关的介绍,这里我们在深入的了解下logback框架. 为什么要使用logback ? --在开发中不建议使用System. ...

  5. Spring Boot 1.0和Spring Boot 1.0.1错误修复版本

    Spring Boot团队最近宣布了Spring Boot 1.0版本 ,随后是Spring Boot 1.0.1.RELEASE ,这是一个错误修复版本,其中还包含一些新功能. Spring Boo ...

  6. .net core 应用程序“default web site”中的服务器错误_Net程序员讲JAVA系列——Spring Boot“科普篇”...

    通过Spring Boot,可以轻松地创建独立的,基于生产级别的基于Spring的应用程序,您可以"运行"它们. 我们对Spring平台和第三方库持固执己见的观点,因此您可以以最小 ...

  7. Spring Cloud 2020 年路线图:二季度Spring Boot 2.3、四季度Spring Cloud Ilford

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 局长 来源 | oschina.net/new ...

  8. 如何优雅关闭 Spring Boot 应用

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 前言 随着线上应用逐步采用 SpringBoot 构建,SpringBoot应用实例越来多, ...

  9. SpringBoot2.0(一):【重磅】Spring Boot 2.0权威发布

    就在昨天Spring Boot2.0.0.RELEASE正式发布,今天早上在发布Spring Boot2.0的时候还出现一个小插曲,将Spring Boot2.0同步到Maven仓库的时候出现了错误, ...

  10. Angular 8 + Spring Boot 2.2:立即构建一个CRUD应用程序!

    "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. 如果您已 ...

最新文章

  1. mysql commit 机制_1024MySQL事物提交机制
  2. Spring思维导图,让Spring不再难懂(aop篇)
  3. 在Windows Mobile和Wince(Windows Embedded CE)下进行Native C++开发,如何取出当前执行文件的路径和调用模块的路径...
  4. 从零点五开始用Unity做半个2D战棋小游戏(九)
  5. 【渝粤题库】国家开放大学2021春1400机器人技术及应用题目
  6. 360浏览器卸载_无法卸载?Win10 强推新 Edge 浏览器,来教你如何干掉它
  7. linux下安装nginx的采坑记录
  8. (35)FPGA原语设计(BUFGCTRL)
  9. C#基础13:预编译指令
  10. 什么是LoRa协议?
  11. Drools 规则引擎一文读懂
  12. Linux查看目录busy,linux umount 提示"device is busy" 终极解决
  13. 虚拟机更新升级,原来的GuestAdditions versions版本不匹配
  14. 文件上传解析器MultipartResolver
  15. 音频信号的基波和谐波介绍
  16. 爬取 48048 条评论,解读 9.3 分的「毒液」是否值得一看?
  17. html正则邮箱格式,JS正则表达式判断邮箱格式是否正确
  18. 华为海思总裁:压在保密柜里面的芯片可以拿出来了
  19. plotwidget横坐标日期_求助x轴为日期时间的图形绘制
  20. 突然发现 ViewState,Linq 水火不容

热门文章

  1. Google大数据三论文
  2. 【珍藏】 2012.NET开发必看资料53个+经典源码77个—下载目录
  3. CentOS各版本更换国内源,一条指令搞定,超简单!
  4. vlan trunk中继链路(讲解+配置)
  5. BGP——邻居状态机+报文分析(总结)
  6. 一机双平面、TCP半连接攻击——SYN攻击详解
  7. jsmin php,使用JSMin.php缩小Javascript
  8. 【11.18总结】从SAML出发在重定向中发现的XSS漏洞
  9. ACM比赛技巧之文件数据输入与输出
  10. 【Vue.js源码解析 三】-- 模板编译和组件化