[错误总结]升级spring-boot->2.6.2|hiberate->5.4.33.Final|spring cloud->2021.0.0 |spring admin->2.4.1
相关系列文章
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相关推荐
- 基于spring boot的邮件微服务消息中间件设计与实现 毕业论文+系统功能图v1.0.vsdx+项目源码
下载地址:https://download.csdn.net/download/m0_63680064/36065411 项目介绍: 基于spring boot的邮件微服务消息中间件设计与实现 毕业论 ...
- 基于Spring Boot 2.5.1 微服务框架发布(Eurynome Cloud )
企业级技术中台微服务架构与服务能力开发平台(Eurynome Cloud ) Eurynome Cloud是一款企业级技术中台微服务架构与服务能力开发平台.基于Spring Boot 2.5.1.Sp ...
- spring Boot 2 运维篇(spring boot程序的打包与部署,多环境开发配置文件的配置,spring boot集成日志框架)
目录 1.SpringBoot程序的打包与运行 程序打包 程序运行 SpringBoot程序打包失败处理 命令行启动常见问题及解决方案 SpringBoot项目快速启动(Linux版) 2.配置高级 ...
- 54. spring boot日志升级篇—logback【从零开始学Spring Boot】
在<44. Spring Boot日志记录SLF4J>章节中有关相关的介绍,这里我们在深入的了解下logback框架. 为什么要使用logback ? --在开发中不建议使用System. ...
- Spring Boot 1.0和Spring Boot 1.0.1错误修复版本
Spring Boot团队最近宣布了Spring Boot 1.0版本 ,随后是Spring Boot 1.0.1.RELEASE ,这是一个错误修复版本,其中还包含一些新功能. Spring Boo ...
- .net core 应用程序“default web site”中的服务器错误_Net程序员讲JAVA系列——Spring Boot“科普篇”...
通过Spring Boot,可以轻松地创建独立的,基于生产级别的基于Spring的应用程序,您可以"运行"它们. 我们对Spring平台和第三方库持固执己见的观点,因此您可以以最小 ...
- Spring Cloud 2020 年路线图:二季度Spring Boot 2.3、四季度Spring Cloud Ilford
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 局长 来源 | oschina.net/new ...
- 如何优雅关闭 Spring Boot 应用
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 前言 随着线上应用逐步采用 SpringBoot 构建,SpringBoot应用实例越来多, ...
- SpringBoot2.0(一):【重磅】Spring Boot 2.0权威发布
就在昨天Spring Boot2.0.0.RELEASE正式发布,今天早上在发布Spring Boot2.0的时候还出现一个小插曲,将Spring Boot2.0同步到Maven仓库的时候出现了错误, ...
- Angular 8 + Spring Boot 2.2:立即构建一个CRUD应用程序!
"我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. 如果您已 ...
最新文章
- mysql commit 机制_1024MySQL事物提交机制
- Spring思维导图,让Spring不再难懂(aop篇)
- 在Windows Mobile和Wince(Windows Embedded CE)下进行Native C++开发,如何取出当前执行文件的路径和调用模块的路径...
- 从零点五开始用Unity做半个2D战棋小游戏(九)
- 【渝粤题库】国家开放大学2021春1400机器人技术及应用题目
- 360浏览器卸载_无法卸载?Win10 强推新 Edge 浏览器,来教你如何干掉它
- linux下安装nginx的采坑记录
- (35)FPGA原语设计(BUFGCTRL)
- C#基础13:预编译指令
- 什么是LoRa协议?
- Drools 规则引擎一文读懂
- Linux查看目录busy,linux umount 提示"device is busy" 终极解决
- 虚拟机更新升级,原来的GuestAdditions versions版本不匹配
- 文件上传解析器MultipartResolver
- 音频信号的基波和谐波介绍
- 爬取 48048 条评论,解读 9.3 分的「毒液」是否值得一看?
- html正则邮箱格式,JS正则表达式判断邮箱格式是否正确
- 华为海思总裁:压在保密柜里面的芯片可以拿出来了
- plotwidget横坐标日期_求助x轴为日期时间的图形绘制
- 突然发现 ViewState,Linq 水火不容