Spring Boot + Zookeeper + Dubbo + Seata 整合后无法启动jar包怎么办

79次阅读
没有评论

共计 5546 个字符,预计需要花费 14 分钟才能阅读完成。

Spring Boot + Zookeeper + Dubbo + Seata 整合后无法启动 jar 包怎么办,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

前言

Spring Boot + Zookeeper + Dubbo + Seata 整合,IDEA 启动项目报错,在 tomcat 中则可以运行。

版本:

Zookeeper 3.6.1

Dubbo 3.7

Seata 1.4 

报错异常信息

22:36:01.157 [restartedMain] WARN  o.a.c.l.WebappClassLoaderBase – [log,173] – The web application [ROOT] appears to have started a thread named [Druid-ConnectionPool-Destroy-92732034] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 java.lang.Thread.sleep(Native Method)
 com.alibaba.druid.pool.DruidDataSource$DestroyConnectionThread.run(DruidDataSource.java:2641)
22:36:01.159 [restartedMain] WARN  o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext – [refresh,554] – Exception encountered during context initialization – cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
22:36:01.182 [restartedMain] ERROR o.s.b.SpringApplication – [reportFailure,858] – Application run failed
org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat
   at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:157)
   at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:540)
   at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142)
   at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775)
   at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
   at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
   at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)
   at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248)
   at com.xuanzhen.CouponApplication.main(CouponApplication.java:27)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:498)
   at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)

Caused by: org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceWrapper: Common causes of this problem include using a final class or a non-visible class; nested exception is org.springframework.cglib.core.CodeGenerationException: java.lang.IllegalAccessError– class com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceWrapper$$EnhancerBySpringCGLIB$$3ec0b0c8 cannot access its superclass com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceWrapper
   at org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:208)
   at org.springframework.aop.framework.ProxyFactory.getProxy(ProxyFactory.java:110)
   at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.createProxy(AbstractAutoProxyCreator.java:473)
   at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:352)
   at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:301)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:434)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1749)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:576)
   … 152 common frames omitted
   
Caused by: java.lang.IllegalAccessError: class com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceWrapper$$EnhancerBySpringCGLIB$$3ec0b0c8 cannot access its superclass com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceWrapper
   at java.lang.ClassLoader.defineClass1(Native Method)
   at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
   at sun.reflect.GeneratedMethodAccessor37.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:498)
   at org.springframework.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:523)
   … 173 common frames omitted

Process finished with exit code 0
 

项目 maven 依赖

  dependencies 
  dependency 
  groupId org.springframework.boot /groupId 
  artifactId spring-boot-dependencies /artifactId 
  version 2.1.1.RELEASE /version 
  type pom /type 
  scope import /scope 
  /dependency 
  /dependencies 
 dependency 
 groupId io.seata /groupId 
 artifactId seata-spring-boot-starter /artifactId 
 version 1.4.0 /version 
 dependency 
 groupId com.101tec /groupId 
 artifactId zkclient /artifactId 
 version 0.11 /version 
 /dependency

尝试使用网上的方式解决,排除 servlet-api、guava、tomcat 依赖冲突等等,均没有解决。

解决

最后,将 Seata 客户端配置文件中默认为 false 的 use-jdk-proxy 改为 true,问题解决。

seata:
 enabled: true
 application-id: coupon
 tx-service-group: my_test_tx_group
 enable-auto-data-source-proxy: true
 data-source-proxy-mode: AT
 use-jdk-proxy: true
 excludes-for-auto-proxying: firstClassNameForExclude,secondClassNameForExclude
......

关于 Spring Boot + Zookeeper + Dubbo + Seata 整合后无法启动 jar 包怎么办问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注丸趣 TV 行业资讯频道了解更多相关知识。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计5546字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)